При вставке записи Wordpress автоматически устанавливает неустановленную переменную в 0 - PullRequest
0 голосов
/ 16 февраля 2020

У меня есть этот 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 должно быть установлено значение текущего идентификатора пользователя и не нуль '.


Кто-нибудь знает, что происходит?

...