PHP脚本中MYSQL更新发票价格语句不执行且无报错,如何解决
问题根因
- 最核心的错误:SQL预处理语句中,值参数
:code被错误包裹了反引号。MySQL中反引号仅用于标识表名、字段名这类标识符,你给参数加反引号后,MySQL会把:code识别为invoices2表的字段,而不是待绑定的传值参数,导致WHERE条件永远匹配不到数据,更新语句自然不会生效。 - 辅助排查点:需确认代码中的
$code变量在当前作用域有正确赋值,你贴出的代码中没有展示$code的定义来源,如果该变量为空或者值不符合表中code字段的存储内容,也会导致无匹配行可更新。 - 无报错的原因:你没有开启PDO的错误抛出模式,SQL执行异常时不会输出任何提示,所以无法直观看到错误。
解决方法
- 首先修正SQL语句,移除
:code外的反引号:
// 原错误写法 // $SQLChangePrice = $odb->prepare("UPDATE `invoices2` SET `price` = :price WHERE `code` = `:code`"); // 修正后写法 $SQLChangePrice = $odb->prepare("UPDATE `invoices2` SET `price` = :price WHERE `code` = :code");
- 开启PDO错误提示,方便后续排查问题,在你的数据库连接初始化代码中加入以下配置:
$odb->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
开启后SQL执行出错会直接抛出异常,你可以快速定位问题点。
- 校验变量和执行结果,你可以在执行SQL前后加临时调试代码确认状态:
// 调试用:确认$code有有效值,没问题后删除 var_dump($code); // 执行后输出受影响行数,大于0说明更新成功,等于0说明无匹配行 echo $SQLChangePrice->rowCount();
内容的提问来源于stack exchange,提问作者juliaroje86
相关产品推荐
相关产品推荐

