在这个问题之后,我运行以下脚本:
$newrecord='{"firsttime":"19.53","secondtime":null,"sX464time":"6.25","wX1X465time":"4.14"}';//JSON
$sql='UPDATE `'.$tablesnames[$i].'` SET `postrecords`='.$newrecord.' WHERE `id`='.$id;
//var_dump($sql) here
$update3=$pdo->exec($sql);
``` `var_dump($sql)` 获取结果:
string 'UPDATE table651
SET postrecords
={"firsttime":"19.53","secondtime":null,"sX464time":"6.25","wX1X465time":"4.14"} WHERE id
=1'
但最后得到警告:
警告:pdo::exec():sqlstate[42000]:语法错误或访问冲突:1064您的sql语法有错误;请查看与您的mysql服务器版本对应的手册,以了解使用“firsttime”:“0”,“secondtime”:null,“sx464time”:null的正确语法
有什么问题吗?
2条答案
按热度按时间w7t8yxp51#
当您使用pdo或面向对象的mysql时,总是绑定参数。
字符串总是需要用引号括起来,数字可以不用引号。不要尝试生成json,而是创建一个数组,然后将其转换为json。
blmhpbnm2#
语法错误是因为在sql中json字符串周围没有引号。
使用
bindParam()
以解决缺少引号的问题,以及确保所有内容都正确转义以防止sql注入。