【问题标题】:Failed to insert after implode an array [closed]内爆数组后插入失败[关闭]
【发布时间】:2014-04-28 05:54:04
【问题描述】:

我想在数据库中插入一个内爆数组..

示例:$array = array('A','B','C').. 内爆后,值将是A,B,C,因为我使用implode(",",$array)...

然后我想插入数据库但是失败了,它说:

您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 near ') 值('Operation Director','Operation Director','F001')

我该怎么办?

这是 MySQL 查询:

$code = $_POST['code'];
$position = $_POST['check'];
$checkok = implode(",",$position);

mysql_query("insert into checklist (check_ok,check_pos,check_code) values ('$checkok','$checkok','$code')") or die (mysql_error());

【问题讨论】:

  • 我们能看到查询的其余部分吗?
  • 表结构和你的查询?

标签: php mysql sql arrays


【解决方案1】:

首先,您应该使用PDOmysqli 并改用prepared statements 来防止潜在的SQL 注入攻击。

其次,语句本身存在语法错误;第一个右括号之前的尾随逗号。

假设你已经配置了正确的字符集,你可以使用这个:

$sql = sprintf(
    "insert into checklist (check_ok,check_pos,check_code) values ('%s','%s','%s')", 
    mysql_real_escape_string($checkok), 
    mysql_real_escape_string($checkok), 
    mysql_real_escape_string($code)
);

mysql_query($sql) or die (mysql_error());

【讨论】:

    【解决方案2】:

    查询checklist (check_ok,check_pos,check_code,) 中有一个不需要的逗号。删除它并尝试,

    mysql_query("insert into checklist (check_ok,check_pos,check_code) values ('$checkok','$checkok','$code')") or die (mysql_error());
    

    【讨论】:

    • 是的,我没有看到它..对不起..它现在工作了..
    • @haruya 请注意,您必须正确转义变量,尤其是因为它们来自$_POST。这里给出的答案仍然容易受到 SQL 注入攻击。
    【解决方案3】:

    为了安全起见,尝试添加斜杠/转义。

    $code = mysql_real_escape_string($_POST['code']);
    $position = mysql_real_escape_string($_POST['check']);
    $checkok = implode(",",$position);
    $checkok = mysql_real_escape_string($checkok);
    $ret = mysql_query("INSERT INTO checklist (check_ok, check_pos, check_code)
                        VALUES ('$checkok','$checkok','$code')");
    

    【讨论】:

      【解决方案4】:

      从查询中删除多余的逗号,

      ("insert into checklist (check_ok,check_pos,check_code,) values ('$checkok','$checkok','$code')"
                                                            ^
      

      Waring: Please, don't use mysql_* functions in new code。它们不再维护and are officially deprecated。看到red box?改为了解 prepared statements,并使用 PDOMySQLi - this article 将帮助您决定哪个。如果你选择 PDO,here is a good tutorial

      【讨论】:

      • 请反对者发表评论。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多