热释光;dr:query是从mysql cli工作的,而不是从php工作的,就好像触发器不是由php触发的一样。
我的mysql结构如下: entity
“parent”表 id
作为主键 contact
是一张有 entity_id
作为pk和fk on
entity person
“孙子”的table entity_id
作为pk和fk on 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
s。
这在mysql中有效,但在php中无效。相同的查询:
INSERT INTO person (first_name, last_name) VALUES ("Bob", "McIntosh")
在mysql cli中工作(所有行都被创建并匹配),但在用调用时失败 mysqli->query()
在php7中出现错误:
Field 'entity_id' doesn't have a default value
如何使它在php中也工作?或者我必须手动创建所有父表吗?
1条答案
按热度按时间6l7fqoea1#
这就成功了,现在查询也可以在php中工作:
(或者不要打开
STRICT_TRANS_TABLES
).