mysql 命令行创建触发器,在shell命令行中创建mysql触发器

I need to create a mysql trigger in command line

This sql working good in mysql console:

$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);

This thrown an mysql error

ERROR 1064 (42000) at line 1: 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 \'END\' at line 1

I have also tried with DELIMITER // ... same error

解决方案

The solution: change DELIMITER $$ with \d $$ (after spending two days with this :( )

In php must use \\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);

It seem that when we put all in one line only work the shorthand of delimiter \d

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值