Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Триггеры MySQL и PHP


Автор: Zolton007 7.4.2011, 15:10
Возникла проблема:
Через EMS MySQL Manager триггер замечательно создается и работает, НО:
- при создании через phpMyAdmin пишет, что sql-запос выполнен, а триггер не создается (я читал, что phpMyAdmin глючит в части триггеров :();
- (самое плохое) триггер не создатся из php-сценария. Сначала пытался создавать серез mysql_query, но понял, что это косяк, т.к. создание триггера - это мульти-запрос и переписал всю свою библиотеку под mysqli и это не помогло :( использование ф-ции mysqli_multi_query точно так же дает ошибку "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'тра-та-та в первой строке (в не прямой зависимости от того что в первой строке написано=))'".
Для понятности даю ксочек кода создания самого простого не создающегося тригггера (назваия изменены):
mysqli_multi_query($this->dblink, "
DELIMITER |
DROP TRIGGER IF EXISTS `OFFICIAL_PHONES_AND_EMAILS_DELETER` |
CREATE TRIGGER `OFFICIAL_PHONES_AND_EMAILS_DELETER` AFTER DELETE ON `T011_OFFICIALS`
FOR EACH ROW BEGIN
DELETE FROM `T012_OFFICIAL_PHONES` WHERE `UID_OFFICIAL` = OLD.UID_OFFICIAL;
DELETE FROM `T013_OFFICIAL_EMAILS` WHERE `UID_OFFICIAL` = OLD.UID_OFFICIAL;
END;|
DELIMITER ;"))


Автор: baldina 7.4.2011, 16:24
DELIMITER убрать надо, оставить точку с запятой
Код

DROP TRIGGER IF EXISTS `OFFICIAL_PHONES_AND_EMAILS_DELETER`;
CREATE TRIGGER `OFFICIAL_PHONES_AND_EMAILS_DELETER` AFTER DELETE ON `T011_OFFICIALS`
FOR EACH ROW BEGIN
DELETE FROM `T012_OFFICIAL_PHONES` WHERE `UID_OFFICIAL` = OLD.UID_OFFICIAL;
DELETE FROM `T013_OFFICIAL_EMAILS` WHERE `UID_OFFICIAL` = OLD.UID_OFFICIAL;
END


только не забудь 
Код

if (mysqli_more_results ($this->dblink))
  while (mysqli_next_result ($this->dblink));

Автор: Zolton007 7.4.2011, 16:41
Цитата(baldina @  7.4.2011,  16:24 Найти цитируемый пост)
только не забудь 
if (mysqli_more_results ($this->dblink))
  while (mysqli_next_result ($this->dblink));


а зачем это?

Автор: baldina 7.4.2011, 16:45
http://www.php.net/manual/en/mysqli.multi-query.php#65810

Автор: Zolton007 7.4.2011, 16:50
baldina, ок. Иначе вываливались ошибки. Добавил это после mysqli_multi_query. Выполнение mysqli_multi_query ошибок не дает... но и триггер не создается :(( 
зы блин!

Добавлено через 4 минуты и 56 секунд
baldina, пардон, это был мой косяк )))) на нервах просто забыл исправить названия таблиц. БОЛЬШОЕ СПАСИБО!!  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)