Я выполняю следующее в 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