У меня есть этот php фрагмент:
$sql = "
CREATE TABLE $tablename (
id mediumint(9) NOT NULL AUTO_INCREMENT,
code varchar(255) NOT NULL UNIQUE,
name varchar(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
created_by mediumint(9) NOT NULL,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NULL,
updated_by mediumint(9) NULL,
PRIMARY KEY (id)
) $charset_collate;
";
$wpdb->query($sql);
И позже, позже я запускаю это:
$wpdb->insert($tablename, ['code' => 'test', 'name' => 'Test'], ['%s','%s']);
Что должно привести к высказыванию исключения MySQL 'create_by не может быть нулевым', но кроме этого он установлен на 0.
Я попытался вставить вручную:
INSERT INTO `my_table` (`code`, `name`) VALUES ('test_list2', 'Test List 2')
И я получил ожидаемое исключение.
Я также пытался установить триггер перед вставкой, чтобы убедиться, что изменения произошли из Wordpress:
delimiter $$
CREATE TRIGGER before_insert_on_my_table
BEFORE INSERT ON my_table
FOR EACH ROW
BEGIN
IF NEW.created_by IS NULL THEN
SIGNAL SQLSTATE '45001' SET MESSAGE_TEXT = 'created_by column has to be set to current user id and not null';
ELSEIF NEW.created_by = 0 THEN
SIGNAL SQLSTATE '45001' SET MESSAGE_TEXT = 'created_by column has to be set to current user id and not 0';
END IF;
END$$
НО это триггерное возвращаемое сообщение: для столбца create_by должно быть установлено значение текущего идентификатора пользователя и не нуль '.
Кто-нибудь знает, что происходит?