1

私のphpサイトでは、管理者はサイトのコンテンツを毎週更新する必要があります。彼がデータを更新するのを忘れた場合、私は彼に電子メールアラートを送りたい. それはどのように可能ですか?バックエンドからメールを送信することは可能ですか。私はググって、トリガーを書くことができるようになりました。しかし、私はそれを行う方法がわかりません。誰でも私を助けてください。

4

2 に答える 2

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 キーワードを使用し、変更が行われた後にアクションを処理する必要がある場合は AFTER キーワードを使用します。

トリガー イベントは、INSERT、UPDATE、および DELETE です。これらのイベントにより、トリガーが呼び出されます。トリガーは、1 つのイベントによってのみ呼び出すことができます。複数のイベントによって呼び出されるトリガーを定義するには、イベントごとに 1 つずつ、複数のトリガーを定義する必要があります。

トリガーは、特定のテーブルに関連付ける必要があります。テーブル トリガーがなければ存在しないため、ON キーワードの後に​​テーブル名を指定する必要があります。

SQL コードは、BEGIN キーワードと END キーワードの間に配置されます。

OLD および NEW キーワードは、トリガーをより効率的に開発するのに役立ちます。OLD キーワードはデータを変更する前の既存のレコードを参照し、NEW キーワードはデータを変更した後の新しい行を参照します。

MySQL トリガーの例

従業員テーブルの変更を監査するために、MySQL でトリガーの作成を開始しましょう。

まず、次のように、MySQL サンプル データベースに employees テーブルがあります。

ここに画像の説明を入力

次に、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)
)

3 番目に、従業員レコードに変更が加えられる前に呼び出される 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 ;

スキーマを見ると、次のように、employees テーブルの下に before_employee_update トリガーが表示されます。

ここに画像の説明を入力

次に、従業員レコードを更新して、トリガーが実際に呼び出されるかどうかをテストします。

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

トリガーが UPDATE ステートメントによって呼び出されたかどうかを確認するには、次のクエリを使用して employees_audit テーブルをクエリできます。

SELECT *
FROM employees_audit

クエリの出力は次のとおりです。

ここに画像の説明を入力

ご覧のとおり、トリガーが実際に呼び出されたので、employees_audit テーブルに新しいレコードが作成されました。

このチュートリアルでは、MySQL でトリガーを作成する方法を学習しました。employees 表の変更を監査するトリガーを作成しました。

于 2013-03-16T11:48:08.857 に答える
0

ウェブホストがスケジュールされたジョブの実行を許可している場合は、トリガーなしでこれを行うこともできます。php スクリプトを定期的に実行して、データベースをチェックし、電子メールを送信することができます。

于 2013-03-16T11:35:19.343 に答える