3 回答

TA貢獻1865條經驗 獲得超7個贊
由于我們使用的是Windows,所以我們必須使用以下方法編譯用于Windows的UDF庫 并將它們安裝在MySQL服務器上。 我們創建了一個調用sys_val的存儲過程。 我們創建了一個調用存儲過程的觸發器。
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);

TA貢獻1817條經驗 獲得超14個贊
@Johan說,在應用程序中添加了一定程度的安全問題(外部PHP腳本調用、權限設置,可能還有SELinux安裝等等)。 給應用程序增加了額外的復雜性(要了解數據庫如何工作,現在需要了解SQL和PHP,而不僅僅是SQL),您還必須調試PHP,而不僅僅是SQL。 向應用程序添加額外的故障點(例如,PHP錯誤配置),這也需要進行診斷(我認為觸發器需要保存一些調試代碼,這些代碼將記錄所有不成功的PHP解釋器調用及其原因)。 增加性能分析的附加點。每個PHP調用都是昂貴的,因為您需要啟動解釋器,將腳本編譯為字節碼,執行它等等。因此,涉及此觸發器的每個查詢都會執行得更慢。有時很難隔離查詢性能問題,因為EXPLAIN沒有告訴您查詢由于觸發例程性能而變慢的任何信息。我也不知道如何將觸發時間轉儲到慢速查詢日志中。 為應用程序測試增加了一些問題。SQL可以很容易地測試。但是要測試SQL+PHP觸發器,您必須應用一些技巧。
添加回答
舉報