在this question之后,我在脚本下面运行:
$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服务器版本相对应的手册,以便在'"""" 0"," secondtime":null附近使用正确的语法" sX464time":null
问题是什么?
答案 0 :(得分:0)
语法错误是因为您没有在SQL中的JSON字符串周围引用。
使用bindParam()
解决缺少引号的问题,并确保正确转义所有内容以防止SQL注入。
$stmt = $pdo->prepare('UPDATE `'.$tablesnames[$i].'` SET `postrecords` = :record WHERE `id`= :id');
$stmt->bindParam(':record', $newrecord);
$stmt->bindParam(':id', $id);
$stmt->execute();
答案 1 :(得分:0)
当您使用PDO或Object Orient MySQL时,始终bind parameters。
字符串总是需要用引号括起来,数字可以没有引号。并且不要尝试创建一个json,而是创建一个数组,然后将其转换为json。
$post_records = json_encode(array(
'firsttime'=> '19.53',
'secondtime' => null,
'sX464time' => '6.25',
'wX1X465time' => '4.14'
));
$sql='UPDATE `'.$tablesnames[$i].'` SET `postrecords`="'.$newrecord.'" WHERE `id`='.$id;