表未使用 wordpress dbdelta 更新

Eug*_*ene 4 wordpress

我有以下用于创建表的代码:

$sql = "CREATE TABLE " . $table_name . "("
         . "id mediumint(9) NOT NULL AUTO_INCREMENT, "
         . "product_id mediumint(9) DEFAULT 0 NOT NULL,"
         . "name_type mediumint(9) NOT NULL, "
         . "name_key varchar(48) NOT NULL, "
         . "valid_until datetime DEFAULT '0000-00-00 00:00:00' NOT NULL, "
         . "created_at datetime DEFAULT '0000-00-00 00:00:00' NOT NULL, "
         . "updated_at datetime DEFAULT '0000-00-00 00:00:00' NOT NULL, "
         . "UNIQUE KEY id (id)"
         . ")" . $charset_collate. ";";
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
dbDelta( $sql );
Run Code Online (Sandbox Code Playgroud)

它正在工作并已创建表。

现在我需要更新表并添加新列(sites_list):

$sql = "CREATE TABLE " . $table_name . "("
         . "id mediumint(9) NOT NULL AUTO_INCREMENT, "
         . "product_id mediumint(9) DEFAULT 0 NOT NULL,"
         . "name_type mediumint(9) NOT NULL, "
         . "name_key varchar(48) NOT NULL, "
         . "sites_list longtext, "
         . "valid_until datetime DEFAULT '0000-00-00 00:00:00' NOT NULL, "
         . "created_at datetime DEFAULT '0000-00-00 00:00:00' NOT NULL, "
         . "updated_at datetime DEFAULT '0000-00-00 00:00:00' NOT NULL, "
         . "UNIQUE KEY id (id)"
         . ")" . $charset_collate. ";";
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
dbDelta( $sql );
Run Code Online (Sandbox Code Playgroud)

但这行不通。

我有一个错误:

WordPress database error: [Table 'table_name' already exists]
Run Code Online (Sandbox Code Playgroud)

什么是不正确的?

谢谢。

小智 5

您错误地使用了 dbDelta 函数。

  • 您必须将 SQL 语句中的每个字段放在自己的行上。

  • PRIMARY KEY 和主键定义之间必须有两个空格。

  • 您必须使用关键字 KEY 而不是其同义词 INDEX,并且必须至少包含一个 KEY。

http://hungred.com/how-to/wordpress-dbdelta-function/