ash*_*h92 2 php mysql sql triggers
我试图通过使用mysql trigger来调用.php.这是mysql的代码
delimiter $$
DROP TRIGGER IF EXISTS qwertyuiop$$
CREATE TRIGGER qwertyuiop
AFTER UPDATE ON testing
FOR EACH ROW
BEGIN
DECLARE cmd CHAR(255);
DECLARE result int(10);
SET cmd=CONCAT('C:/wamp/www/index.php');
SET result = sys_exec(cmd);
END
@@
Delimiter;
Run Code Online (Sandbox Code Playgroud)
提前致谢
即使在lib_mysqludf_sys图书馆的帮助下技术上可行,你也不应该这样做.在所有可能的方面都是错的.仅举几例:
单独使用这些UDF是一个巨大的安全威胁.以下是lib文档的简短引用:
在决定是否需要此功能时要非常小心.UDF可供所有数据库用户使用 - 您无法为它们授予EXECUTE权限.由于传递给sys_exec的命令字符串几乎可以完成所有操作,因此暴露该函数会带来非常真实的安全隐患.即使对于良性使用者,也可能意外地对其造成很大的伤害.调用将以运行MySQL的操作系统用户的权限执行,因此删除MySQL的数据目录完全可行,或者更糟.
在触发器中执行任何非事务操作都是错误的.DML语句(在您的情况下,它是一个更新)所做的数据更改可以并将在现实世界的场景中回滚.您将无法撤消对PHP脚本的调用.
您正在延长更新事务的时间,可能导致其他更新/插入操作的锁定等待超时.
推荐阅读:
现在,即使我们放弃了上面提到的所有内容,您的代码也存在一些问题
DELIMITER为$$但随后终止触发器定义@@.cmd变量.据说工作版可能看起来像
DELIMITER $$
CREATE TRIGGER qwertyuiop
AFTER UPDATE ON testing
FOR EACH ROW
BEGIN
DECLARE result INT;
SET result = sys_exec('C:/php/php.exe C:/path/to/script.php');
END$$
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16253 次 |
| 最近记录: |