create mysql trigger in shell command line

2019-11-04 15:08发布

我需要创建在命令行中一个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行错误1064(42000):你在你的SQL语法错误; 检查对应于你的MySQL服务器版本在1号线附近的\“END \”的使用权语法手册

我也试图与DELIMITER // ...同样的错误

Answer 1:

解决办法:改变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



文章来源: create mysql trigger in shell command line