MySQL UPDATE语句语法错误排查求助:无法定位问题原因
问题排查与解决
错误根源
你的SQL语法存在明显问题:UPDATE语句更新多列时,仅需书写一次SET关键字,后续列只需用逗号分隔即可。你在deleted_timestamp赋值后重复添加了SET,导致MySQL无法正确解析语句,这就是报错的核心原因。
从错误日志生成的SQL语句也能直观看到问题:
UPDATE changemgmt.rfc SET deleted_timestamp = modified_timestamp = {ts '2022-09-12 10:14:13'}, SET deleted_by = 'first.last' WHERE rfc_id = 3;
第二行的SET deleted_by属于多余语法,完全不符合SQL规范。
修正后的CFQuery代码
<cfquery name="del" datasource="#APPLICATION.db.source#" username="#APPLICATION.db.user#" password="#APPLICATION.db.pass#"> UPDATE changemgmt.rfc SET deleted_timestamp = <cfqueryparam cfsqltype="CF_SQL_TIMESTAMP" value="#Now()#">, deleted_by = <cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#SESSION.user.name#"> WHERE rfc_id = <cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#arguments.rfc_id#">; </cfquery>
关键提示
- 多列更新时,
SET仅需出现一次,列与列之间用逗号分隔即可 - 保持代码缩进能更清晰地避免这类低级语法错误
- 你当前使用
cfqueryparam的方式是正确的,建议继续保持(可有效防止SQL注入,同时提升数据库执行性能)
内容的提问来源于stack exchange,提问作者Michael Buckman
相关产品推荐
相关产品推荐

