CREATE TABLE WITH DBDelta不创建表

时间:2020-07-19 作者:FCD

我是根据这些文件从法典中提取这段代码的。我把它放在我的主插件文件中,但它没有创建数据库表。我错过什么了吗?



    // Database setup and hooks
    
    function core_createdb() {
        global $wpdb;
        $table_name = $wpdb->prefix . \'core_logs\';
        $wpdb_collate = $wpdb->collate;
        $sql = 
            "CREATE TABLE {$table_name} (
            timestamp DATE NOT NULL,
            logid INT NOT NULL AUTO_INCREMENT,
            userid INT DEFAULT NULL,
            actiontype TINYTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT \'undefined\',
            userip VARCHAR CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT \'unknown\',
            actioncontent VARCHAR CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
            botactioncomment VARCHAR CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
            botactionmade BOOLEAN DEFAULT \'0\',
            flaglevel TINYINT DEFAULT \'0\',
            PRIMARY KEY  (logid),
            KEY useridkey (userid)
            )
            COLLATE {$wpdb_collate}";
    
        require_once(ABSPATH . \'wp-admin/includes/upgrade.php\');
        dbDelta($sql);
    
        $success = empty($wpdb->last_error);
    
        return $success;
    }
    
    // Create Database
    
    add_action(\'init\', \'core_createdb\');

1 个回复
最合适的回答,由SO网友:Tony Djukic 整理而成

我发现了一些东西,包括我认为可以纠正你的问题的东西。(顺便说一句,你应该尝试并简化你的初始尝试,这样你就可以区分哪些有效,哪些无效。对于初始尝试来说,这真的很复杂。)

有一件事,您将很难将字段命名为timestamp, 因为timestamp 是SQL字段类型。所以当你有timestamp DATE NOT NULL 实际上,它会混淆它,因为它会抛出两个SQL字段类型,而不是字段标题/名称。实际上,我注意到这一点是因为SUBLIME文本3中的颜色格式-两者都是timestampDATE 都是一样的颜色。

此外,根据法典:

字段类型必须全部为小写(https://codex.wordpress.org/Creating_Tables_with_Plugins)

下面是我对代码的重写尝试:

function core_createdb() {
    global $wpdb;
    $table_name = $wpdb->prefix . \'core_logs\';
    $wpdb_collate = $wpdb->get_charset_collate();
    $sql = 
        "CREATE TABLE $table_name (
        time_stamp date NOT NULL,
        logid int NOT NULL AUTO_INCREMENT,
        userid int DEFAULT NULL,
        actiontype tinytext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT \'undefined\',
        userip varchar CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT \'unknown\',
        actioncontent varchar CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
        botactioncomment varchar CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
        botactionmade boolean DEFAULT 0 NOT NULL,
        flaglevel tinyint(4) DEFAULT 0 NOT NULL,
        PRIMARY KEY  (logid),
        KEY useridkey (userid)
        ) $wpdb_collate;";   
    require_once(ABSPATH . \'wp-admin/includes/upgrade.php\');
    dbDelta($sql);
    $success = empty($wpdb->last_error);
    return $success;
}
// Create Database
add_action( \'init\', \'core_createdb\' );

相关推荐

无法在MacOS Catalina上使用WP CLI和MAMP连接到MySQL数据库,使用的是哦My Zsh

我正在运行macOS Catalina,并尝试将WP CLI与MAMP结合使用,将iTerm2和Oh My Zsh作为命令行。但是,当我输入wp 在命令行中,然后按q 要退出,我会遇到以下错误:PHP Notice: Undefined index: SERVER_NAME in phar:///usr/local/Cellar/wp-cli/2.4.0/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Runner.php(1197) : eval()\'d code on