从 MySQL 触发器调用 PHP 脚本

2022-08-30 08:56:14

有没有办法在将记录插入MySQL数据库表时调用PHP页面/函数?我们无法控制记录插入过程。有没有可以调用PHP脚本的触发机制?


答案 1

触发器在MySQL服务器上执行,而不是在PHP服务器上执行(即使它们都在同一台计算机上)。

所以,我想说这是不可能的 - 至少不是简单地。


不过,考虑到触发器MySQL常见问题解答中的这个条目

23.5.11: 触发器可以通过 UDF 调用外部应用程序吗?

是的。例如,触发器可以调用此处提供的 UDF:https://github.com/mysqludf/lib_mysqludf_sys#readmesys_exec()

因此,可能有一种方法可以通过UDF函数启动php可执行文件/脚本。没那么容易,但似乎有可能。;-)


答案 2

我和一位朋友已经想出了如何将Bernardo Damele的sys_eval UDF,但解决方案并不像我想要的那么优雅。以下是我们所做的:

  1. 由于我们使用的是Windows,因此我们必须使用Roland Bouman的说明编译Windows的UDF库,并将其安装在MySQL服务器上。
  2. 我们创建了一个调用sys_eval的存储过程。
  3. 我们创建了一个调用存储过程的触发器。

存储过程代码:

DELIMITER $$
CREATE PROCEDURE udfwrapper_sp
(p1   DOUBLE,
 p2   DOUBLE,
 p3 BIGINT)
BEGIN
 DECLARE cmd CHAR(255);
 DECLARE result CHAR(255);
 SET cmd = CONCAT('C:/xampp/php/php.exe -f "C:/xampp/htdocs/phpFile.php" ', p1, ' ', p2, ' ', p3);
 SET result = sys_eval(cmd);
END$$;

触发码:

CREATE TRIGGER udfwrapper_trigger AFTER INSERT ON sometable
FOR EACH ROW
CALL udfwrapper_sp(NEW.Column1, NEW.Column2, NEW.Column3);

我对拥有存储过程并不感到兴奋,我不知道它是否会产生额外的开销,但它确实有效。每次将一行添加到某个表中时,触发器就会触发。


推荐