mysql - 警告: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 附近使用的正确语法
有什么问题?
解决方案
语法错误是因为您在 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();
推荐阅读
- r - 设置基于 R 的 nls 参数,因此 0 是任何系数的选项
- python-3.x - 根据日期过滤数据框
- list - 过滤嵌套列表并使用 Java8 中的流进行转换
- powerbi - 报告中的 power bi API 数据
- javascript - 将链接插入 xml 代码的最佳方法是什么?
- python - 我的 if 语句在我的 Python 文件中不起作用
- python - 从另一个函数(Discord.py)停止函数中的“等待”
- python - 无法使用 f 字符串访问列表的元素
- r - R 需要 TRUE/FALSE 的缺失值
- python - pymoo 中具有自定义或任意步长的离散变量