为了账号安全,请及时绑定邮箱和手机立即绑定

将数组从 js 发送到 php 再到 SQL 数据库

将数组从 js 发送到 php 再到 SQL 数据库

PHP
达令说 2023-04-15 14:26:19
我希望我在这里遗漏了一些简单的东西。我有一个在 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_ID$sql = "INSERT INTO `mydb`.`dbtable`(`COL_ID`) VALUES ('$ids)";此管道适用于单个值(例如,ids = 2但不适用于数组。我想要的是将COL_ID每个数组元素包含为一行| COL_ID    ||--------   || 1         || 2         || 3         || 4         || 5         |我怀疑它在 SQL 查询中。欢迎任何帮助。
查看完整描述

2 回答

?
慕村9548890

TA贡献1884条经验 获得超4个赞

首先,使用准备好的语句,不要将发布数据直接插入数据库查询。直接使用 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 注入。


查看完整回答
反对 回复 2023-04-15
?
慕容3067478

TA贡献1773条经验 获得超3个赞

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.") ";

}


查看完整回答
反对 回复 2023-04-15
  • 2 回答
  • 0 关注
  • 116 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信