我正在尝试在我的 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)
你的两条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)
希望有帮助。