在 function.php 中的 WordPress 数据库中创建一个表

kic*_*ich 1 php sql wordpress

我正在尝试在我的 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');
Run Code Online (Sandbox Code Playgroud)

Jam*_*nes 5

你的两条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');
Run Code Online (Sandbox Code Playgroud)

顺便说一句,您不需要在每个列名称前添加“ ratings_fansub_”前缀。没有什么可以阻止您使用像这样的创建语句

"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;";
Run Code Online (Sandbox Code Playgroud)

希望有帮助。