由于某些原因,我无法让这个触发器在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 $$命令,并尝试通过困扰过程和面向对象的方法来运行它。
如能提供任何帮助,将不胜感激。
发布于 2013-12-11 21:26:38
;
之后终止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代码在mysqli_*
中的样子
<?php
$db = new mysqli('localhost', 'user', 'password', 'dbname');
if (!$db) {
die('Could not connect: ' . $db->connect_error); //TODO better error handling
}
$sql = "
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";
if (!$db->query($sql)) {
die('Can\'t create the trigger: ' . $db->error); //TODO better error handling
}
$db->close();
echo 'Trigger successfully created.';
发布于 2013-12-11 21:23:23
试试下面的代码。
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 ;
https://stackoverflow.com/questions/20529287
复制相似问题