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"');
但是,你最好关闭舱口 -- 这将是黑客肆虐的绝妙方式。
我正在尝试 运行 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()
.
你想在一个文件里放一堆初始化的东西吗?那为什么还要 PHP;做
mysql ... -e "source foo.sql"
好的,你确实想要 PHP 到 运行 的东西?然后从 php:
执行此操作execcute('mysql ... -e "source foo.sql"');
但是,你最好关闭舱口 -- 这将是黑客肆虐的绝妙方式。