首页 > 解决方案 > 警告:PDO::exec(): SQLSTATE [42000]:语法错误或访问冲突:1064

问题描述

这个问题之后,我运行下面的脚本:

$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 附近使用的正确语法

有什么问题?

标签: mysqlpdo

解决方案


语法错误是因为您在 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();

推荐阅读