问题:我有一张表可以保存某些记录.插入完成后,我想通过
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
);
触发布局:
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 ;
免责声明:我知道使用sys_exec函数时的安全问题,我的问题是MySQL没有插入FIRST,然后用必要的参数调用脚本.
如果有人能够解释如何解决这个问题,或者有一种不同的方法,不涉及SELECT INTO OUTFILE和使用FAM – 我将非常感激.提前致谢.