【问题标题】:Send an http request in mysql trigger after insertion in a table插入表后在mysql触发器中发送http请求
【发布时间】:2014-12-27 06:45:49
【问题描述】:

我正在使用 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 ;

但是我遇到了类似的错误

消息:SQLSTATE[42000]:语法错误或访问冲突:1305 FUNCTION emg.json_object 不存在

消息:SQLSTATE[42000]:语法错误或访问冲突:1305 FUNCTION emg.http_put 不存在

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

【问题讨论】:

  • 看起来这些函数都包含在 library called mysql-udf-http 中 - 您是否已将其安装到数据库中?
  • @StuartLC:不。我是第一个使用这个触发器的。我们如何在数据库中安装那个文件?请帮忙。
  • 好吧,假设您安装在 Linux 上并且可以控制服务器,我想您需要按照我链接的页面上的说明进行操作。就 IMO 而言,从数据库执行 Web 请求并不是一个好主意。
  • 不幸的是,我正在使用 Windows,我如何下载文件以及在哪里添加它?抱歉,您能帮帮我吗?

标签: php mysql http triggers


【解决方案1】:

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

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

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

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

强烈推荐阅读:


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

【讨论】:

  • 即使使用触发器有风险,我也想知道我们如何创建 UDF 来运行此触发器并发送 http 请求...您能帮忙吗?
  • 从库的文档来看,它很可能无法在 Windows 上运行。但是您始终可以使用 Vagrant 虚拟机将您的 MySQL 实例放在其中一个 linux 发行版上,并能够安装这组 udfs。
  • 如何查看或下载 lib_mysqludf_sys?安装在哪里?请帮忙
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-13
  • 1970-01-01
  • 2019-03-21
  • 2017-08-22
  • 1970-01-01
  • 2017-09-18
  • 1970-01-01
相关资源
最近更新 更多