我的会话中有一个字符串数组,我试图将其存储到数据库中。但是我收到了一个错误:
您的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但没有帮助。
答案 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
。然后,您应该保存,因为每个值都不会('
和')