php - 插入表后在mysql触发器中发送http请求

标签 php mysql http triggers

我在 PHP 中工作。我必须创建一个 mysql 触发器,它在插入表后触发 http 请求。下面是代码。

DELIMITER @@
CREATE TRIGGER Test_Trigger
AFTER INSERT ON insertsms
FOR EACH ROW
BEGIN
  SET @tt_json = (SELECT json_object(id,addtime,title) 
                  FROM insertsms WHERE id = NEW.id LIMIT 1);
  SET @tt_resu = (SELECT http_put(CONCAT('--url localhost--')));
END;
@@
DELIMITER ;

但是我遇到了这样的错误

Message: SQLSTATE[42000]: Syntax error or access violation: 1305 FUNCTION emg.json_object does not exist

Message: SQLSTATE[42000]: Syntax error or access violation: 1305 FUNCTION emg.http_put does not exist

如何消除这个错误?我无法下载包含这些功能的支持文件。我已经在本地主机上进行了测试。还有其他方法可以实现我的要求吗?请任何人帮助我..

最佳答案

虽然这在技术上是可行的,但出于以下几个原因,我强烈建议您不要走这条路:

  1. 使用 UDF 本身就是一种安全风险。 UDF 对所有数据库用户都可用——您不能为他们授予 EXECUTE 权限。

  2. 在触发器中执行任何非事务性操作都是完全错误的。 DML 语句所做的数据更改(在您的情况下是更新)可以并且将在现实世界场景中回滚。您将无法撤消您的 http 调用。

  3. 您正在延长插入事务的时间,可能导致其他更新/插入操作的锁定等待超时。

强烈推荐阅读:


现在您很可能需要的是一个工作队列,例如beanstalked .使用这种专门的中间件比用数据库组织队列要好得多。

关于php - 插入表后在mysql触发器中发送http请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27665066/

相关文章:

mysql - 两次查询,结果重复

javascript - 如何将文本文件的数据保存到变量中并在 php 文件中读取/显示它?

带有 Apache HttpClient 的 Java 客户端连接到 Druid

http - 我的 Azure 网站在(监视器)门户中有一个奇怪的 "HTTP success"模式

php - 结果发布缓慢 - 没有其他问题,问题出在哪里?

php - 断裂变换抛出 bool 值给定

mysql - 如何在smarty中获取多列(mysql_fetch_assoc())值

php - 我将如何构建一个像这样工作的简单 php 钩子(Hook)系统?

php - 使用修剪、stripslashes 和 htmlspecialchars 时,撇号会导致插入查询出现问题

http - Owin 自托管 - 无法监听前缀 'http://localhost:12345/',因为它与机器上的现有注册冲突