出于某种原因,我不能让这个触发器在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' SET message_text = @msg;
END IF
END
我尝试过使用DELIMTER $$命令,并试图通过编写过程和面向对象的方法来运行它。
任何帮助将不胜感激
答案 0 :(得分:0)
尝试以下代码。
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 ;
答案 1 :(得分:0)
;
END IF
@msg
变量,尤其是用户(会话)变量据说你的触发器看起来像
CREATE TRIGGER `check_title`
BEFORE INSERT ON `customer`
FOR EACH ROW
BEGIN
IF NEW.title NOT IN('Mr','Miss','Ms','Dr','Mrs') THEN
SIGNAL sqlstate '45000' SET message_text = 'Constraint check_title violated';
END IF;
END
这是 SQLFiddle 演示
现在,从php执行它你不需要改变DELIMITER
,因为它是一个mysql客户端命令而不是SQL语句。
您没有提到您实际使用的扩展名(mysqli_*
,PDO
,希望不会弃用mysql_*
),因此以下是您的php代码与{ {1}}
mysqli_*