您的SQL语法有错误:保存字符串

时间:2014-12-29 10:44:21

标签: php mysql string escaping

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

  

您的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但没有帮助。

1 个答案:

答案 0 :(得分:0)

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

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

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

如果您确保INSERT INTO student (improve1) values %s中的结果始终与$valuesArr[]一样,则可以轻松地将基础sql更改为('ADHD,ASPERGER')

但我建议你只需在数组中存储真值(ADHD,ASPERGER,NEXTVALUE,ANOTHERVALUE ......)并构建如下的sql:

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

这将使用implode中的字符串替换占位符%s。然后,您应该保存,因为每个值都不会('')