【发布时间】:2018-11-30 16:40:01
【问题描述】:
我正在尝试在 PDO 中运行以下 SQL 字符串。我可以确认代码确实直接在 MySQL 中执行,但在 PHP PDO 中运行它会引发错误。
我了解DELIMITER $$ 在 PDO 接口上不可用。根据how to execute mysql command DELIMITER,将分隔符留在查询之外应该没问题。
查询字符串:
CREATE DEFINER=CURRENT_USER TRIGGER `M5_tblMVTransactionVat_VatInsert` AFTER INSERT ON `M2_tblVatRevisions`
FOR EACH ROW BEGIN
UPDATE M5_tblMVTransactionVat
SET M5_tblMVTransactionVat.vatID = 1;
END
CREATE DEFINER=CURRENT_USER TRIGGER `M5_tblMVTransactionVat_VatUpdate` AFTER UPDATE ON `M2_tblVatRevisions`
FOR EACH ROW BEGIN
UPDATE M5_tblMVTransactionVat
SET M5_tblMVTransactionVat.vatID = 2;
END
通过简单的 PDO::exec 或 PDOStatement::prepare(使用 PDO::ATTR_EMULATE_PREPARES = 1)运行会导致错误
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an
error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near 'CREATE
DEFINER=CURRENT_USER TRIGGER `M5_tblMVTransactionVat_VatUpdate` AFTER
UPD' at line 8
我已经确认通过 PDO 一次只运行一个 Create Trigger 不会导致相同的错误并且触发器已成功创建。 .
如何在一个 PDO 连接上执行多个创建触发器查询?
【问题讨论】: