2013-03-16 47 views
1

在我的php站點管理員必須每週更新站點中的內容。如果他忘記更新數據,我想向他發送電子郵件警報。怎麼可能?是否有可能從後端發送郵件。我GOOGLE了,我得到了我們可以寫觸發器。但我不知道該怎麼做。有人請幫助我。如何在php中編寫觸發器mysql

+0

你的問題不清楚。你想只是安排一封電子郵件,或者想要定期發送某種報告?它是否與數據庫相關,如果是,什麼樣的數據庫(某些答案假設爲MySQL)? – core1024 2013-03-16 12:02:57

+0

簡單的PHP腳本,每週運行幾次,檢查最新的created_at或updated_at字段在你的表中與帖子,如果> = 7天發送郵件是最簡單的方法 – san4o 2013-03-17 09:44:34

+0

你是否想要一個基於CodeIgniter的解決方案,作爲一個cron作業? – 2013-03-23 10:34:35

回答

0

如果您的虛擬主機允許您執行計劃任務,您也可以在沒有觸發器的情況下執行此操作。您可以定期運行一個php腳本來檢查數據庫併發送電子郵件。

+0

如果在Linux上託管,預定作業稱爲「cron」作業。根據提醒的緊急程度,這項工作每週可以運行1到2次。 PHP scrpt還可以保存發送的電子郵件提醒日誌。 – 2013-03-16 11:37:51

+0

@Marc Audet ..謝謝。但是,你能幫我解決一下如何做這個工作。這是我第一次做這樣的工作。 – Ammu 2013-03-23 04:24:38

3

MySQL的觸發器語法

爲了創建使用CREATE TRIGGER語句的觸發器。下面舉例說明CREATE TRIGGER語句的語法:

CREATE TRIGGER trigger_name trigger_time trigger_event 
ON table_name 
FOR EACH ROW 
BEGIN 
... 
END 

讓我們來看看上面的語法的更多細節。

您將觸發器名稱放在CREATE TRIGGER語句之後。觸發器名稱應遵循命名約定[觸發時間] [表名] [觸發事件],例如before_employees_update。

觸發激活時間可以是BEFORE或AFTER。您必須在定義觸發器時指定激活時間。如果您希望在對錶進行更改之前處理操作,並且在進行更改之後需要處理操作,請使用BEFORE關鍵字。

觸發事件可以是INSERT,UPDATE和DELETE。這些事件會導致觸發器被調用。一個觸發器只能被一個事件調用。要定義由多個事件調用的觸發器,您必須定義多個觸發器,每個事件一個觸發器。

觸發器必須與特定的表相關聯。沒有表格觸發器將不存在,因此您必須在ON關鍵字之後指定表格名稱。

SQL代碼位於BEGIN和END關鍵字之間。

OLD和NEW關鍵字可幫助您更有效地開發觸發器。在您更改數據之前,OLD關鍵字指的是現有記錄,更改數據之後NEW關鍵字指向新行。

MySQL的觸發例如

讓我們開始在MySQL創建觸發器來審覈員工表的變化。

首先,我們的員工表中我們的MySQL數據庫示例如下:

enter image description here

其次,我們創建了一個新的表名爲employees_audit保持的員工記錄的變化。以下腳本創建employee_audit表。

CREATE TABLE employees_audit (
    id int(11) NOT NULL AUTO_INCREMENT, 
    employeeNumber int(11) NOT NULL, 
    lastname varchar(50) NOT NULL, 
    changedon datetime DEFAULT NULL, 
    action varchar(50) DEFAULT NULL, 
    PRIMARY KEY (id) 
) 

第三,我們創造一改之前是給員工記錄所做要調用的BEFORE UPDATE觸發器。

DELIMITER $$ 
CREATE TRIGGER before_employee_update 
    BEFORE UPDATE ON employees 
    FOR EACH ROW BEGIN 

    INSERT INTO employees_audit 
    SET action = 'update', 
     employeeNumber = OLD.employeeNumber, 
     lastname = OLD.lastname, 
     changedon = NOW(); 
END$$ 
DELIMITER ; 

如果你看一看模式,你會看到員工桌下before_employee_update觸發如下:

enter image description here

現在是時候更新員工記錄,如果觸發測試真的被調用。

UPDATE employees 
SET lastName = 'Phan' 
WHERE employeeNumber = 1056 

要檢查是否觸發了UPDATE語句調用,我們可以通過下面的查詢查詢employees_audit表:

SELECT * 
FROM employees_audit 

以下是查詢的輸出:

enter image description here

正如您所看到的,我們的觸發器真的被調用,因此我們在employees_audit表中創建了一條新記錄。

在本教程中,您已學習如何在MySQL中創建觸發器。你已經寫了一個觸發器來審計僱員表的變化。