Intereting Posts
выбор исправления исправления не разрешен Как запустить cmd.exe для выполнения команды с помощью Task Scheduler? Как создать вспомогательные методы на Laravel, а не фасад Доступ к родительскому элементу элемента с помощью SimpleXML PHP? отправка электронной почты с помощью функции php mail распространяется на спам Как добавить / установить изображения на шаблоне PHPOffice / PHPWord? Изменение относительных путей ссылок для включенного содержимого в PHP Получить базовый каталог текущего скрипта Защита пользовательских данных с помощью кодирования и декодирования? Как подсчитать div определенного класса с помощью PHP DOMDocument Самозакрывающиеся теги с использованием createElement Неустранимая ошибка: вызов неопределенной функции ftp_ssl_connect () Как показать ошибки на стороне клиента в Laravel php DomDocument добавляет дополнительные теги График потока приложений PHP (или график вызовов функций)

Создать триггер mysql через PHP?

Я выполняю следующее в PHP5.3:

$sql = " CREATE TRIGGER `_photo_fulltext_insert` AFTER INSERT ON `photo` FOR EACH ROW INSERT INTO `_photo_fulltext` SELECT * FROM `photo` WHERE `id`=NEW.`id`; CREATE TRIGGER `_photo_fulltext_delete` AFTER DELETE ON `photo` FOR EACH ROW DELETE FROM `_photo_fulltext` WHERE `id`=OLD.`id`; DELIMITER | CREATE TRIGGER `_photo_fulltext_update` AFTER UPDATE ON `photo` FOR EACH ROW BEGIN DELETE FROM `_photo_fulltext` WHERE `id`=NEW.`id`; INSERT INTO `_photo_fulltext` SELECT * FROM `photo` WHERE `id`=NEW.`id`; END; | DELIMITER ; "; $mysqli->multi_query($sql); 

Триггер «photo_fulltext_update» не создается. Этот оператор запускает (и создает все триггеры) в phpMyAdmin. Я где-то читал в Интернете, что сервер MySQL вообще не поддерживает оператор DELIMITER, поэтому я ищу способ переписать этот многоступенчатый оператор CREATE TRIGGER, чтобы mysqli :: multi_query мог отправить его в MySQL ,

Благодаря!

Хотя mysqli ничего не делает с DELIMITER в операторах с multi-query , он фактически ничего не делает с любыми разделителями вообще в обычных запросах, поэтому просто задвигайте триггеры поодиночке:

 $ cat i.php <?php $mysqli = new mysqli('localhost', 'test', '', 'test'); $sql = " CREATE TRIGGER `_foo_fulltext_update` AFTER UPDATE ON `foo` FOR EACH ROW BEGIN DELETE FROM `bar` WHERE `bar`=NEW.`bar`; INSERT INTO `bar` (bar) SELECT bar FROM `foo` WHERE `bar`=NEW.`bar`; END; "; $mysqli->query($sql); var_dump($mysqli->error); $ php i.php string(0) "" $ mysql mysql> use test; Database changed mysql> show triggers\G *************************** 1. row *************************** Trigger: _foo_fulltext_update Event: UPDATE Table: foo Statement: BEGIN DELETE FROM `bar` WHERE `bar`=NEW.`bar`; INSERT INTO `bar` (bar) SELECT bar FROM `foo` WHERE `bar`=NEW.`bar`; END Timing: AFTER Created: NULL sql_mode: Definer: root@localhost character_set_client: latin1 collation_connection: latin1_swedish_ci Database Collation: utf8_general_ci 1 row in set (0.00 sec) 

Это может помочь вам:

PHP: несколько SQL-запросов в одном операторе mysql_query

это также может помочь: следующее создает триггер для выбора таблиц. измените код, и он может делать то, что вы хотите. https://github.com/junicom/mysqltriggerscript