将js到php的数组发送到sql数据库

sshcrbum  于 2021-08-13  发布在  Java
关注(0)|答案(2)|浏览(355)

我希望我错过了一些简单的东西。
我在js中创建了一个数组,比如: var ids = [1,2,3,4,5]; 现在我想让这个数组填充我的sql数据库表中的一列。
我有管道设置,可以将单个元素添加到表中,如下所示:
通过ajax发送请求:

  1. $.ajax({
  2. type: "POST",
  3. url: "some.php",
  4. data: {
  5. ids: ids,
  6. }
  7. });
  8. ``` `some.php` 接收数据(建立连接等): `$ids = $_POST['ids'];` sql用于向列col\u id插入单个值

$sql = "INSERT INTO mydb.dbtable(COL_ID) VALUES ('$ids)";

  1. 此管道适用于单个值(例如 `ids = 2` 但对于数组失败。
  2. 我想要的是 `COL_ID` 将每个数组元素包含为一行
COL_ID
1
2
3
4
5
  1. 我怀疑它在sql查询中。欢迎任何帮助。
ltqd579y

ltqd579y1#

首先,使用准备好的语句,不要将post数据直接插入数据库查询。直接使用post数据意味着您容易受到sql注入攻击。
正如@danielreed所指出的,正确的格式是

  1. INSERT INTO table_name (column_list) VALUES (value_list_1), (value_list_2), (value_list_3);

您可以动态构建:

  1. $ids = $_POST['ids'];
  2. // Make sure we get the correct number of ? for prepared statements
  3. $params = str_repeat('(?), ', count($ids));
  4. // Strip the trailing space and comma
  5. $params = substr($params, 0, -2);
  6. $sql = 'INSERT INTO `mydb`.`dbtable`(`COL_ID`) VALUES ' . $params;

现在可以使用$sql作为查询,$ids作为准备语句的值。这会阻止sql注入。

0h4hbjxa

0h4hbjxa2#

php将其作为数组接收。
sql语法需要以下语法:

  1. INSERT INTO table_name (column_list)
  2. VALUES
  3. (value_list_1),
  4. (value_list_2),
  5. ...
  6. (value_list_n);

所以你可以做的是:

  1. $sql = "INSERT INTO `mydb`.`dbtable`(`COL_ID`) ";
  2. foreach($ids as $value){
  3. $sql .= "(".$value.") ";
  4. }

相关问题