1

使用するすべてのテーブルに対して手動でトリガーを作成する必要がないように、トリガープロセスを自動化しようとしています。残念ながら、構文エラーがあるというエラーが返されます。

これが私のコードです

$updateTrigger = "DROP TRIGGER IF EXISTS {$table}Update
    CREATE TRIGGER {$table}Update AFTER UPDATE ON $table
    FOR EACH ROW
    BEGIN
       DECLARE N DATETIME;
       SET N = now();
       INSERT INTO StagesHistory (Stage, StageID, Date, Action)
       VALUES ('$table', NEW.ID, N, ?);
    END";

$ut = $dbh->prepare($updateTrigger);
$ut->execute(array($update));
$error = $ut->errorInfo();

評価$errorすると、次のエラーメッセージが返されます。

SQL構文にエラーがあります。2行目の「CREATETRIGGERTranslationUpdateAFTER UPDATE ON Translation FOR EACH R」の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

それがどんなエラーについて話しているのか理解できません。問題は何ですか、どうすれば修正できますか?

4

2 に答える 2

3

DROP TRIGGER ...およびCREATE TRIGGER ...は2つの別個のステートメントです。少なくともそれらをで区切る必要があり;、場合によっては別々のクエリで実行する必要があります。

于 2012-06-28T14:43:12.967 に答える
1

セミコロンがありませんか?次のようになりますDROP TRIGGER IF EXISTS {$table}Update;

于 2012-06-28T14:46:27.277 に答える