【问题标题】:You have an error in your SQL syntax : saving strings您的 SQL 语法有错误:保存字符串
【发布时间】:2014-12-29 10:44:20
【问题描述】:

我的会话中有一个字符串数组,我试图将其存储到数据库中。但我收到一个错误:

您的 SQL 语法有错误;检查手册 对应于正确语法的 MySQL 服务器版本

我的代码如下:

$improve =$_SESSION['post']['improve'];

if(is_array($improve))
    {
    $sql = "INSERT INTO student (improve1) values ('%s')";
    $valuesArr = array();
    $i=0;
    for ($i=1; $i <=$childtoen; $i++) 
        { 
        $improve_list="";
        if ($improve[$i][0]!="")
                {
                    $improve= mysql_real_escape_string( $improve[$i] );
                    $improve_list = implode( ',', $improve); echo $improve_list;  //echo is working Fine
                }

        $improve_list = mysql_real_escape_string( $improve_list );
        $valuesArr[] = "('$improve_list' )";
        }

$sql .= implode(',', $valuesArr);
mysql_query($sql,$connection) or exit(mysql_error()); 
}

我也在转义字符串的原因可能是什么?我什至尝试转义 imptove_list 但没有帮助。

【问题讨论】:

  • 完整的错误信息是什么?
  • 只需echo 查询结果,看看有什么问题。很明显!
  • 执行echo $sql 并向我们展示结果。为什么每个新用户都使用mysql_* 函数?它们已弃用,请勿使用。学习 mysqli 甚至更好的 PDO。 mysql_* 已弃用。
  • 完全错误是You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '('ADHD,ASPERGER' )' at line 1@juergend

标签: php mysql string escaping


【解决方案1】:

我认为您会收到错误,因为 $sql .= implode(',', $valuesArr); 只是将内爆数组附加到您的预定义字符串,因此 SQL 语句无效。

编辑:阅读您现在发布的错误消息后。

当我正确理解您的脚本时,$valuesArr[] = "('$improve_list' )"; 太多了。最终结果将是('ADHD,ASPERGER')。我认为这会导致像 INSERT INTO student (improve1) values ('('ADHD,ASPERGER')') 这样的 SQL 语句,然后你会遇到给定的错误,因为 ' 会削减你的 SQL。

如果您确保$valuesArr[] 中的结果总是像('ADHD,ASPERGER') 一样,那么简单的方法是将您的基本sql 更改为INSERT INTO student (improve1) values %s

但我建议您将实际值(ADHD、ASPERGER、NEXTVALUE、ANOTHERVALUE 等)存储在您的数组中,然后像这样构建 sql:

$sql = sprintf($sql, implode(',', $valuesArr));

这会将占位符 %s 替换为 implode 中的字符串。然后你应该保存,因为你避免每个值的('')

【讨论】:

  • 你的意思是$sql .= implode($valuesArr);?如果我这样做,这个错误就会消失,但数据库中的值为%s
  • 在您发布错误消息后,我更新了答案。
猜你喜欢
  • 2018-08-15
  • 1970-01-01
  • 1970-01-01
  • 2020-12-27
  • 1970-01-01
  • 2013-05-30
  • 1970-01-01
  • 2016-10-30
  • 2014-04-21
相关资源
最近更新 更多