PDO 中的多个创建触发器查询

Multiple Create Trigger query in PDO

我正在尝试 运行 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 一次只创建一个触发器不会导致相同的错误并且触发器已成功创建。 .

如何在 PDO 连接上执行多个创建触发器查询?

不要一次执行多条语句。

没有理由这样做,而且it causes problems if you try

MySQL 的前任工程总监曾经告诉我,multi_query 没有理由存在,它只会造成伤害(那是我的释义)。

在对 PDO::exec().

的调用中执行每个 CREATE TRIGGER 语句更简单、更安全

你想在一个文件里放一堆初始化的东西吗?那为什么还要 PHP;做

mysql ... -e "source foo.sql"

好的,你确实想要 PHP 到 运行 的东西?然后从 php:

执行此操作
execcute('mysql ... -e "source foo.sql"');

但是,你最好关闭舱口 -- 这将是黑客肆虐的绝妙方式。