小编Mih*_*ael的帖子

MySQL触发器 - AFTER INSERT触发器+ UDF sys_exec()问题

问题:我有一张包含某些记录的表格.插入完成后,我想通过MySQL的sys_*UDF调用外部程序(php脚本).现在,问题 - 我已经将记录的ID传递给脚本的触发器.当我尝试通过脚本提取数据时,我得到0行.在我自己的测试中,我得出结论,触发器调用php脚本并在实际插入发生之前传递参数,因此我没有得到给定ID的记录.我在MySQL 5.0.75和5.1.41(Ubuntu OS)上测试了这个.我可以确认参数在实际插入之前传递给脚本,因为我添加了sleep(2); 到我的PHP脚本,我已正确获取数据.没有睡觉(); 声明,我收到了给定ID的0条记录.

我的问题是 - 如何解决这个问题,而不必在PHP脚本中硬编码某种延迟?我没有自由假设2秒(或10秒)将是足够的延迟,所以我希望一切都"自然地"流动,当一个命令完成时 - 另一个命令执行.

我假设如果触发器是AFTER INSERT类型,那么在MySQL实际插入数据之后,触发器体内的所有内容都将被执行.

表格布局:

CREATE TABLE test (
id int not null auto_increment PRIMARY KEY,
random_data varchar(255) not null
);
Run Code Online (Sandbox Code Playgroud)

触发布局:

DELIMITER $$

CREATE TRIGGER `test_after_insert` AFTER INSERT ON `test` 
FOR EACH ROW BEGIN

SET @exec_var = sys_exec(CONCAT('php /var/www/xyz/servers/dispatcher.php ', NEW.id));
END;
$$

DELIMITER ;
Run Code Online (Sandbox Code Playgroud)

免责声明:我知道使用sys_exec函数时的安全问题,我的问题是MySQL没有插入FIRST,然后用必要的参数调用脚本.如果有人能够解释如何解决这个问题,或者有一种不同的方法,不涉及SELECT INTO OUTFILE和使用FAM - 我将非常感激.提前致谢.

mysql triggers insert user-defined-functions

8
推荐指数
2
解决办法
1万
查看次数

标签 统计

insert ×1

mysql ×1

triggers ×1

user-defined-functions ×1