gpt4 book ai didi

MySQL触发器在插入后检查是否没有重复然后运行sys_exec udf

转载 作者:行者123 更新时间:2023-11-29 10:36:10 25 4
gpt4 key购买 nike

MySQL版本:5.1.73数据库客户端版本:libmysql - 5.1.73

我试图检查 NEW.src 在过去一小时内是否存在,如果不存在则执行 sys_exec udf。

我在 mysql 中有以下触发器。由于这是插入后触发器,我的 IF 条件将检查过去一小时内是否只有一个值,然后继续执行 sys_exec 语句。

BEGIN
SET @numofcalls = (SELECT count(src) FROM `cdr` WHERE calldate >= DATE_SUB(NOW(),INTERVAL 1 HOUR) AND src = NEW.src);
IF (numofcalls = 1) then
SET @missed_call = sys_exec(CONCAT('/usr/bin/php /var/lib/asterisk/agi-bin/api_pbx/call_api.php ', NEW.src));
END IF;
END

保存触发器时没有出现语法错误。当插入新记录时,sys_exec 语句似乎没有运行并从 IF 条件退出。

有人可以建议我在这里做错了什么吗?

最佳答案

我建议您不要从 MySQL 触发器执行 php 程序。

原因:

  • 当触发器运行时(即使是后触发器),插入尚未在数据库中提交。如果您的 PHP 脚本尝试查询数据库,它将无法看到未提交的数据。另外,插入可以回滚,但通话不能回滚。
  • 您无法检查 PHP 脚本中的错误或退出状态。很难调试 PHP 脚本是否成功。

相反,我建议您不要使用触发器,而是插入数据并提交事务,然后使用应用程序代码检查是否应该运行调用,然后从应用程序执行它。换句话说,不要执行对数据库外部有影响的代码。

关于MySQL触发器在插入后检查是否没有重复然后运行sys_exec udf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46397889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com