我使用以下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帮助我创建我的触发器......
答案 0 :(得分:1)
错误告诉你究竟出了什么问题。 DELIMITER $$ DROP ...
不是有效的陈述。部分原因是delimiter
是MySQL命令,而不是语句。另一个原因是“DELIMITER $$”中的“$$”是命令的一部分,因此不会终止命令。您仍需要包含旧分隔符。
根据文档,mysql_query
不支持多个语句,因此您必须为每个语句发出单独的查询。更好的是,切换到较新的mysqli驱动程序,其multi_query
函数适用于单个查询中的多个语句。 mysqli还支持预处理语句,这在您的示例中并不重要,但在大多数其他情况下也是如此。 PDO甚至更新,也支持prepared statements,我相信PDO MySQL驱动程序支持多查询。
作为触发器的替代方法,基于行的binary logging将记录对数据库中的表所做的更改。