MySQL Trigger не работает в PHP - PullRequest
0 голосов
/ 12 мая 2018

TL; DR: Запрос работает из CLI MySQL, но НЕ из PHP, как если бы триггеры не запускались PHP.

У меня есть структура mySQL, которая выглядит следующим образом:

  • entity - это «родительская» таблица с id в качестве PK
  • contact - это «дочерняя» таблица с entity_id в качестве PK и FK на entity
  • person - это таблица «grand-child» с entity_id в качестве PK и FK на contact

Я создал несколько триггеров, чтобы при вставке новой строки в contact,сначала он вставляет новую строку в entity и использует новый id как entity_id.То же самое для person и contact.Все триггеры сделаны на одной и той же модели, вот один:

DELIMITER #
DROP TRIGGER IF EXISTS contact_insert_trig;
CREATE TRIGGER contact_insert_trig BEFORE INSERT ON `contact`
FOR EACH ROW BEGIN
    INSERT INTO entity (cat_id) values (1);
    SET NEW.entity_id = (SELECT id FROM entity ORDER BY id DESC LIMIT 1);
    SET NEW.entity_cat_id = 1;
END; #

Так, например, когда я вставляю новую строку в person, первый триггер создает строку в contact, которая, черезвторой триггер создает строку в entity, все с совпадающими id с.

Это работает в MySQL, но НЕ в PHP.Тот же запрос:

INSERT INTO person (first_name, last_name) VALUES ("Bob", "McIntosh")

работает в CLI mySQL (все строки созданы и совпадают), но не выполняется при вызове с mysqli->query() в PHP7 с ошибкой:

Field 'entity_id' doesn't have a default value

Как я могу заставить его работать на PHP?Или мне нужно пройти через процесс создания всех родительских таблиц вручную?

1 Ответ

0 голосов
/ 13 мая 2018

Это помогло, теперь запросы работают и с PHP:

SET SESSION sql_mode = 'NO_ENGINE_SUBSTITUTION';

(или не включать STRICT_TRANS_TABLES).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...