亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從MySQL觸發器調用PHP腳本

從MySQL觸發器調用PHP腳本

白衣非少年 2019-06-28 10:52:18
從MySQL觸發器調用PHP腳本在將記錄插入MySQL數據庫表時,如何調用PHP頁面/函數?我們無法控制記錄插入過程。是否有可以調用PHP腳本的觸發機制?
查看完整描述

3 回答

?
鴻蒙傳說

TA貢獻1865條經驗 獲得超7個贊

我和一個朋友已經想出了如何調用BernardoDamele的sys_valudf,但是這個解決方案并不像我想的那樣優雅。以下是我們所做的:

  1. 由于我們使用的是Windows,所以我們必須使用以下方法編譯用于Windows的UDF庫

    羅蘭·布曼指示

    并將它們安裝在MySQL服務器上。
  2. 我們創建了一個調用sys_val的存儲過程。
  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);

對于存儲過程,我并不感到興奮,我也不知道它是否會產生額外的開銷,但它確實有效。每次向Someetable添加一行時,觸發器都會觸發。


查看完整回答
反對 回復 2019-06-28
?
大話西游666

TA貢獻1817條經驗 獲得超14個贊

這應該被認為是非常糟糕的編程實踐從數據庫觸發器調用PHP代碼。如果你用這樣的“瘋狂”技巧來解釋你想要解決的任務,我們可能會提供一個令人滿意的解決方案。


我應該早點加上一些推理,但現在只找到時間去做這件事。感謝@CMC的重要評論。因此,PHP觸發器為應用程序添加了以下復雜性:

  • @Johan說,在應用程序中添加了一定程度的安全問題(外部PHP腳本調用、權限設置,可能還有SELinux安裝等等)。

  • 給應用程序增加了額外的復雜性(要了解數據庫如何工作,現在需要了解SQL和PHP,而不僅僅是SQL),您還必須調試PHP,而不僅僅是SQL。

  • 向應用程序添加額外的故障點(例如,PHP錯誤配置),這也需要進行診斷(我認為觸發器需要保存一些調試代碼,這些代碼將記錄所有不成功的PHP解釋器調用及其原因)。

  • 增加性能分析的附加點。每個PHP調用都是昂貴的,因為您需要啟動解釋器,將腳本編譯為字節碼,執行它等等。因此,涉及此觸發器的每個查詢都會執行得更慢。有時很難隔離查詢性能問題,因為EXPLAIN沒有告訴您查詢由于觸發例程性能而變慢的任何信息。我也不知道如何將觸發時間轉儲到慢速查詢日志中。

  • 為應用程序測試增加了一些問題。SQL可以很容易地測試。但是要測試SQL+PHP觸發器,您必須應用一些技巧。


查看完整回答
反對 回復 2019-06-28
  • 3 回答
  • 0 關注
  • 1151 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號