2009-04-13 126 views

回答

4

MySQL現在有觸發器和存儲過程,但我不相信他們有任何方式通知外部進程,所以據我所知這是不可能的。你必須每隔一秒鐘輪詢一下數據庫才能查找新記錄。

即使是這樣,它也會假定你的PHP進程是長期存在的,這樣它就可以掛起來記錄出現。鑑於大多數PHP用於代碼運行的網站,然後儘快退出,因此不清楚這與您的產品是否兼容。

+0

顯然這是可能的,但有一些插件: http://dev.mysql.com/doc/refman/5.0/en/faqs-triggers.html#qandaitem-22-5-1-10 – 2009-04-14 22:51:23

5

最簡單的事情可能是每隔幾秒輪詢一次數據庫,看看是否插入了新記錄。由於數據庫中的查詢緩存,這不會影響數據庫的性能。

2

如果所有的數據庫更改都是由PHP創建的,我會爲mysql_query創建一個包裝函數,如果查詢類型是INSERT,REPLACE,UPDATE或DELETE,我會調用一個函數發送相應的電子郵件。

編輯:我忘了提,但你也可以做類似如下:

if (mysql_affected_rows($this->connection) > 0) 
{ 
    // mail(...) 
} 
-1

這可以相對容易地使用存儲過程和觸發器來實現。我創建了一個「實時查看」屏幕,其中有一個滾動顯示屏,該顯示屏通過我的事件表中的新事件進行更新。它可能有點煩瑣,但一旦運行得很快。

2

您可以創建一個觸發器,而不是在發生更新時運行。可以使用UDF(用戶定義函數)運行/通知外部進程。沒有任何內建的方法可以這樣做,所以這是一個加載UDF插件的例子,它會爲您做。

Google for'mysql udf sys_exec'或'mysql udf ipc'。