我正在使用以下PHP代码来创建触发器但总是出错,请帮我解决它

时间:2010-03-30 11:22:30

标签: mysql triggers

我使用以下PHP代码创建触发器,但总是出错,请帮我解决。

$link = mysql_connect('localhost','root','rainserver');
    mysql_select_db('information_schema');
                echo $trgquery = "DELIMITER $$ DROP TRIGGER `update_data` $$ CREATE TRIGGER `update_data` AFTER UPDATE on `jos_menu` FOR EACH ROW BEGIN
IF (NEW.menutype != OLD.menutype) THEN
INSERT INTO jos_menuaudit set menuid=OLD.id, oldvalue = OLD.menutype, newvalue = NEW.menutype, field = 'menutype';
END IF;
IF (NEW.name != OLD.name) THEN
INSERT INTO jos_menuaudit set menuid=OLD.id, oldvalue = OLD.name,

newvalue = NEW.name, field = 'name';
END IF;
IF (NEW.alias != OLD.alias) THEN
INSERT INTO jos_menuaudit set menuid=OLD.id, oldvalue = OLD.alias,

newvalue = NEW.alias, field = 'alias';
END IF;
END$$ DELIMITER ;";
                echo "<br>";
        //$trig = mysqli_query($link,$trgquery) or die("Error Exist".mysqli_error($link));
         $trig = mysql_query($trgquery) or die("Error Exist".mysql_error());

我收到错误:

Error ExistYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '$$ DROP TRIGGER `update_data` $$ CREATE TRIGGER `update_data` AFTER UPDATE on `j' at line 1

PLease帮助我创建我的触发器......

1 个答案:

答案 0 :(得分:1)

错误告诉你究竟出了什么问题。 DELIMITER $$ DROP ...不是有效的陈述。部分原因是delimiter是MySQL命令,而不是语句。另一个原因是“DELIMITER $$”中的“$$”是命令的一部分,因此不会终止命令。您仍需要包含旧分隔符。

根据文档,mysql_query不支持多个语句,因此您必须为每个语句发出单独的查询。更好的是,切换到较新的mysqli驱动程序,其multi_query函数适用于单个查询中的多个语句。 mysqli还支持预处理语句,这在您的示例中并不重要,但在大多数其他情况下也是如此。 PDO甚至更新,也支持prepared statements,我相信PDO MySQL驱动程序支持多查询。

作为触发器的替代方法,基于行的binary logging将记录对数据库中的表所做的更改。