为什么我不能用PDO创建触发器?

时间:2012-06-28 14:38:00

标签: php mysql pdo

我正在尝试自动化我的触发器进程,这样我就不必为我想要使用的每个表手动创建触发器。不幸的是,我收到一条错误,说有语法错误。

这是我的代码

$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服务器版本对应的手册,以便在'CREATE TRIGGER之后使用正确的语法翻译更新翻译后翻译           对于第2行的每个R'

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

2 个答案:

答案 0 :(得分:3)

DROP TRIGGER ...CREATE TRIGGER ...是两个单独的陈述。您至少需要用;分隔它们,可能在单独的查询中执行它们。

答案 1 :(得分:1)

不是分号丢失了吗?它应该是:DROP TRIGGER IF EXISTS {$table}Update;