问题:我有一张包含某些记录的表格.插入完成后,我想通过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 - 我将非常感激.提前致谢.