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

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

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

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

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

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

ltqd579y1#

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

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

您可以动态构建:

$ids = $_POST['ids'];
// Make sure we get the correct number of ? for prepared statements
$params = str_repeat('(?), ', count($ids));
// Strip the trailing space and comma
$params = substr($params, 0, -2);

$sql = 'INSERT INTO `mydb`.`dbtable`(`COL_ID`) VALUES ' . $params;

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

0h4hbjxa

0h4hbjxa2#

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

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

所以你可以做的是:

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

相关问题