【问题标题】:create a table in wordpress database within function.php在 function.php 中的 wordpress 数据库中创建一个表
【发布时间】:2015-12-20 10:56:35
【问题描述】:

我试图在我的 wordpress 数据库中创建一个自定义表以保存剧集率,我想使用函数 PHP,因为我不想创建插件 我使用了这段代码,但它不起作用,表不会被创建,任何帮助。

function ratings_fansub_create() {

    global $wpdb;
    $table_name = $wpdb->prefix. "ratings_fansub";
    global $charset_collate;
    $charset_collate = $wpdb->get_charset_collate();
    global $db_version;

    if( $wpdb->get_var("SHOW TABLE LIKE " . $table_name)!= $table_name)
    {   $create_sql = "CREATE TABLE ".$table_name. "(
            ratings_fansub_id INT(11) NOT NULL auto_increment,
            ratings_fansub_postid INT(11) NOT NULL ,
            ratings_fansub_posttitle TEXT NOT NULL,
            ratings_fansub_rating INT(2) NOT NULL ,
            ratings_fansub_timestamp VARCHAR(15) NOT NULL ,
            ratings_fansub_ip VARCHAR(40) NOT NULL ,
            ratings_fansub_host VARCHAR(200) NOT NULL,
            ratings_fansub_username VARCHAR(50) NOT NULL,
            ratings_fansub_userid int(10) NOT NULL default '0',
            ratings_fansub_PRIMARY KEY (id))$charset_collate;";
    }
                require_once(ABSPATH . "wp-admin/includes/upgrade.php");
    dbDelta( $create_sql );




    //register the new table with the wpdb object
    if (!isset($wpdb->ratings_fansub)) 
    {
        $wpdb->ratings_fansub = $table_name; 
        //add the shortcut so you can use $wpdb->stats
        $wpdb->tables[] = str_replace($wpdb->prefix, '', $table_name); 
    }

}
add_action( 'init', 'ratings_fansub_create');

【问题讨论】:

    标签: php sql wordpress


    【解决方案1】:

    您的两条 SQL 语句略有错误。所以

    • "SHOW TABLE LIKE " . $table_name 替换为 "SHOW TABLES LIKE '" . $table_name . "'"
    • ratings_fansub_PRIMARY KEY (id) 替换为 PRIMARY KEY (ratings_fansub_id)

    修改后的代码如下:

    function ratings_fansub_create() {
    
        global $wpdb;
        $table_name = $wpdb->prefix. "ratings_fansub";
        global $charset_collate;
        $charset_collate = $wpdb->get_charset_collate();
        global $db_version;
    
        if( $wpdb->get_var("SHOW TABLES LIKE '" . $table_name . "'") !=  $table_name)
        {   $create_sql = "CREATE TABLE " . $table_name . " (
                ratings_fansub_id INT(11) NOT NULL auto_increment,
                ratings_fansub_postid INT(11) NOT NULL ,
                ratings_fansub_posttitle TEXT NOT NULL,
                ratings_fansub_rating INT(2) NOT NULL,
                ratings_fansub_timestamp VARCHAR(15) NOT NULL,
                ratings_fansub_ip VARCHAR(40) NOT NULL ,
                ratings_fansub_host VARCHAR(200) NOT NULL,
                ratings_fansub_username VARCHAR(50) NOT NULL,
                ratings_fansub_userid int(10) NOT NULL default '0',
                PRIMARY KEY (ratings_fansub_id))$charset_collate;";
        }
        require_once(ABSPATH . "wp-admin/includes/upgrade.php");
        dbDelta( $create_sql );
    
    
    
    
        //register the new table with the wpdb object
        if (!isset($wpdb->ratings_fansub))
        {
            $wpdb->ratings_fansub = $table_name;
            //add the shortcut so you can use $wpdb->stats
            $wpdb->tables[] = str_replace($wpdb->prefix, '', $table_name);
        }
    
    }
    add_action( 'init', 'ratings_fansub_create');
    

    在旁注中,您不需要在每个列名称前加上“ratings_fansub_”。没有什么能阻止你拥有像

    这样的 create 语句
    "CREATE TABLE " . $table_name . " (
                id INT(11) NOT NULL auto_increment,
                postid INT(11) NOT NULL ,
                posttitle TEXT NOT NULL,
                rating INT(2) NOT NULL,
                timestamp VARCHAR(15) NOT NULL,
                ip VARCHAR(40) NOT NULL ,
                host VARCHAR(200) NOT NULL,
                username VARCHAR(50) NOT NULL,
                userid int(10) NOT NULL default '0',
                PRIMARY KEY (id))$charset_collate;";
    

    希望对您有所帮助。

    【讨论】:

    • 谢谢它的工作,我终于把我的表放在数据库里了
    • @kichkich 很高兴为您提供帮助。不要忘记接受答案,它会给回答者代表,让其他人知道问题已得到回答
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多