从php执行MySQL触发器时遇到问题
由于某些原因,我无法让这个触发器在PHP中运行,即使它在phpMyAdmin中工作从php执行MySQL触发器时遇到问题,php,mysql,Php,Mysql,由于某些原因,我无法让这个触发器在PHP中运行,即使它在phpMyAdmin中工作 CREATE TRIGGER `check_title` BEFORE INSERT ON `customer` FOR EACH ROW BEGIN IF NEW.title NOT IN ('Mr','Miss','Ms','Dr','Mrs')THEN SET @msg := 'Constraint check_title violated'; SIGNAL sqlstate '45000' S
CREATE TRIGGER `check_title` BEFORE INSERT ON `customer`
FOR EACH ROW
BEGIN
IF NEW.title NOT IN ('Mr','Miss','Ms','Dr','Mrs')THEN
SET @msg := 'Constraint check_title violated';
SIGNAL sqlstate '45000' SET message_text = @msg;
END IF
END
我尝试过使用DELIMTER$$命令,并尝试通过过程方法和面向对象方法运行它
任何帮助都将不胜感激请尝试下面的代码
DELIMITER $$
DROP TRIGGER IF EXISTS testing.check_title$$
USE `testing`$$
CREATE TRIGGER `check_title` BEFORE INSERT ON `customer` FOR EACH ROW
IF NEW.title NOT IN ('Mr','Miss','Ms','Dr','Mrs') THEN
SIGNAL sqlstate '45000' SET message_text = 'Constraint check_title violated';
END IF
$$
DELIMITER ;
你没有终止;结束后如果
您根本不需要@msg变量,尤其是用户会话变量
也就是说你的扳机看起来
创建触发器“检查标题”
在插入“客户”之前
每行
开始
如果NEW.title不在'Mr','Miss','Ms','Dr','Mrs'中,那么
信号sqlstate'45000'设置消息_text='Constraint check_title invalized';
如果结束;
终止
这是演示
现在,从php执行它时,您不需要更改分隔符,因为它是mysql客户机命令,而不是SQL语句
您没有提到您实际使用的扩展名mysqli_*、PDO、hope not deprecatedmysql_*是什么,下面是您的php代码在mysqli中的样子_*
在尝试添加触发器时,如果您收到任何错误消息,您会收到什么错误消息?您是否尝试过通过MySQL命令客户端而不是通过phpMyAdmin添加触发器?我收到了这个错误:1064-您的SQL语法有错误;在第5行附近,查看与MySQL服务器版本相对应的手册,以了解要使用的正确语法。我以前通过在触发器前后更改分隔符使其工作,虽然我知道这不适用于phpThank you,但我花了很多时间试图使其工作。我使用了PDO,并成功地修改了我的代码,使其能够使用PDO工作。