You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用mysql2 2.2.5创建触发器时遇ER_UNSUPPORTED_PS错误求助

解决mysql2中创建触发器时ER_UNSUPPORTED_PS错误的方法

这个错误的核心原因是:MySQL的预处理协议不支持CREATE TRIGGER这类DDL语句,而mysql2的query方法默认会尝试对动态生成的SQL使用预处理机制,从而触发了这个限制。

直接解决方案:禁用预处理

在调用connection.query时,添加prepare: false选项,强制mysql2直接执行SQL语句而非使用预处理:

connection.query(
  `CREATE TRIGGER ${triggerName} AFTER UPDATE ON print FOR EACH ROW BEGIN
     UPDATE materialized_views SET dirty = 1 WHERE viewName = ${DBHelper.escape(dependantTable.tableName)};
   END;`,
  { prepare: false } // 禁用预处理,绕过协议限制
);

补充说明

  1. SQL注入防护:你当前使用DBHelper.escape处理表名是正确的,因为触发器名称、表名这类标识符无法通过参数绑定传递,必须手动转义避免注入风险。
  2. 标识符校验:确保triggerName本身也经过合理的转义或校验,避免包含特殊字符导致SQL语法错误。
  3. 语句有效性:你的SQL语句本身没有问题(Workbench可执行),问题仅出在mysql2默认的预处理行为上。

内容的提问来源于stack exchange,提问作者Kian G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 15:50:23