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 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的“CREATE TRIGGER TranslationUpdate AFTER UPDATE ON Translation FOR EACH R”附近使用正确的语法

我无法弄清楚它在说什么错误。有什么问题,我该如何解决?

4

2 回答 2

3

DROP TRIGGER ...并且CREATE TRIGGER ...是两个单独的语句。您至少需要用 a 将它们分开;,可能在单独的查询中执行它们。

于 2012-06-28T14:43:12.967 回答
1

是不是少了一个分号?应该是这样的:DROP TRIGGER IF EXISTS {$table}Update;

于 2012-06-28T14:46:27.277 回答