我需要在命令行中创建一个 mysql 触发器
这个 sql 在 mysql 控制台中运行良好:
$sql = "
USE DB1;
DROP TRIGGER IF EXISTS my_trigger;
DELIMITER $$
CREATE TRIGGER my_trigger AFTER UPDATE ON tbl1
FOR EACH ROW BEGIN
INSERT INTO DB2.tbl2 (column1)
VALUES (1234);
END$$
DELIMITER ;
";
$cmd = 'mysql -sse "'.$sql.'";';
//put all in one line to avoid shell errors
$cmd = preg_replace('/\r\n|\r|\n|\t|\s+/m', " ", $cmd);
exec("($cmd) 2>&1", $output, $result);
这引发了一个mysql错误
第 1 行的 ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在第 1 行 \'END\' 附近使用的正确语法
我也试过DELIMITER //
......同样的错误
解决办法:改变DELIMITER $$
与\d $$
(花两天这个:(后)
在php中必须使用 \\d $$
$sql = "
USE DB1;
DROP TRIGGER IF EXISTS my_trigger;
\\d $$
CREATE TRIGGER my_trigger AFTER UPDATE ON tbl1
FOR EACH ROW BEGIN
INSERT INTO DB2.tbl2 (column1)
VALUES (1234);
END$$
\\d ;
";
$cmd = 'mysql -sse "'.$sql.'";';
//put all in one line to avoid shell errors
$cmd = preg_replace('/\r\n|\r|\n|\t|\s+/m', " ", $cmd);
exec("($cmd) 2>&1", $output, $result);
似乎当我们将所有内容放在一行中时,只能使用分隔符的简写
\d
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句