php 中使
用 pdo 执行 update 语句时,若在 set 子句最后一个字段赋值后误加逗号(如 listprice = :price,),将触发 sqlstate[42000] 错误(错误号 1064),提示语法错误。根本原因是 mysql 不允许 set 后跟冗余逗号。
该错误典型表现为:
Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; ... near 'WHERE productID = '1'' at line 6
定位关键线索:错误信息中 near 'WHERE productID = '1'' 表明 SQL 解析器在读到 WHERE 前已因语法异常中断——这通常意味着 SET 子句存在结构性问题,最常见即末尾多余的逗号。
在您提供的代码中,问题明确出现在 $query 字符串的 SET 部分:
$query = 'UPDATE products
SET categoryID = :category_id,
productCode = :code,
productName = :name,
listPrice = :price, ← ❌ 多余逗号!此处导致语法中断
WHERE productID = :product_id';✅ 正确写法(移除 listPrice = :price 后的逗号):
$query = 'UPDATE products
SET categoryID = :category_id,
productCode = :code,
productName = :name,
listPrice = :price ← ✅ 无逗号
WHERE productID = :product_id';⚠️ 注意事项:
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
总结:该 1064 错误并非逻辑或权限问题,而是纯粹的 SQL 书写规范问题。养成编写 SQL 时「末项不加逗号」的习惯,并借助工具验证,可显著减少此类低级但致命的语法陷阱。