2011-04-21 91 views
4

我實際上想要在記錄添加到數據庫時以郵件或某種方式通知用戶。它可能嗎?像ON INSERT觸發器,我執行一些PHP?可能對MySQL插入執行PHP嗎?

+4

爲什麼你需要這樣做?不會從PHP代碼插入..? – Shameer 2011-04-21 10:41:58

+0

@Shameer,我使用的是一個WordPress插件,我不知道或者需要很長的時間才能找出這個處理的位置,我猜... – 2011-04-21 14:35:58

+0

它不會花費太多時間。檢查插件目錄以查找哪些代碼插入到數據庫中。然後在成功插入時編寫郵件功能。 – Shameer 2011-04-22 06:57:19

回答

2

只要檢查插入是否成功,然後發送郵件給客戶。

3

你不能用mysql事件執行PHP腳本。

你必須在PHP端做到這一點。

檢查插入命令是否成功執行併發送郵件。

1

你不能在一個MySQL查詢執行PHP,但你可以檢查,如果查詢成功進行,然後郵寄人,mysql_query()將返回booleantruefalse)。如果你正在使用PHP,讓我們用正確的方式;)

if(mysql_query('// your query here')){ 
    //mail someone 
} 
1

這是可能從MySQL中觸發了由安裝MySQL sys_exec UDF

但是執行外部程序,它似乎是一個開銷做所以。爲什麼你會讓MySQL觸發通知,當它是插入PHP的時候,那時你知道你輸入了數據?

+0

我正在使用一個WordPress插件,我不知道這是在哪裏處理的...通過代碼的挖掘需要時間 – 2011-04-21 14:37:06

+0

相信我,對MySQL進行更改(例如創建觸發器,調用外部程序,照顧錯誤比挖掘插件的低谷代碼更麻煩。 – 2011-04-21 14:37:59

0

在數據庫插入/修改/刪除中生成通知(電子郵件等)的最快最簡單的方法是通過在數據庫中執行更改的腳本執行此操作。

<?php 
$res = mysql_query('INSERT INTO `table` (`field1`) VALUES ("One")'); 
if($res){ 
# Send Notification 
} 
?> 

如果做不到這一點,在你沒有執行自己的數據庫操作(因爲某些原因)的情況下,還是要能夠執行定時彙總(每小時,每天,每週),你將需要使用類似Cron作業的東西來輪詢數據庫並檢查更改。

<?php 
# A file containing an integer which is the Highest ID in the table 
$indexFile = 'lastIndexID.txt'; 
# Get that Highest ID from the file, if it exists 
$lastIndex = 0; 
if(file_exists($indexFile ) 
    $lastIndex = (int) file_get_contents($indexFile); 
# Check the Database 
$res = mysql_query('SELECT `id` FROM `table` ORDER BY `id` DESC LIMIT 1'); 
if($res && mysql_num_rows($res)==1){ 
    $row = mysql_fetch_assoc($res); 
    # Check if the ID has increased (ie new rows added) 
    if($row['id']>$lastIndex){ 
    # Send Notification 
    # The number of New Rows will be the difference between $row['id'] and $lastIndex 
    # Update the Index File 
    file_put_contents($indexFile , $row['id']); 
    } 
}else{ 
# An Error Occurred 
} 
?>