- У вас нет прекращения
;
после 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.';
Какое сообщение об ошибке, если какой-либо вы пытаетесь добавить триггер? Вы пытались добавить триггер через MySQL-клиент команды, а не через phpMyAdmin? –
Я получаю эту ошибку: '# 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с '' в строке 5 '. Я работал над этим раньше, изменяя разделитель до и после триггера, хотя я понимаю, что это не работает через php –