WPDB:无法使用插件安装创建多个数据库表

时间:2016-12-24 03:50:33

标签: mysql wordpress

我的插件应该在激活后创建两个表。但是只创建了第二个表。这是我的函数中创建表的部分。

require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
global $wpdb;
$ml_wpid = $wpdb->prefix . "ml_wpid";
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE IF NOT EXISTS " . $ml_wpid . " (
    `wp_id` mediumint(9) NOT NULL
    `name` text NOT NULL
UNIQUE (`char_id`)
) $charset_collate;";
dbDelta( $sql );

require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
global $wpdb;
$ml_char = $wpdb->prefix . "ml_char";
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE IF NOT EXISTS " . $ml_char . " (
    `char_id` mediumint(9) NOT NULL AUTO_INCREMENT,
    `name` text NOT NULL,
UNIQUE (`char_id`)
) $charset_collate;";
dbDelta( $sql );

// starts output buffering
ob_start();

我觉得发生这种情况的原因是因为重新定义了$ sql变量。但是我已经尝试将第二个表的$ sql变量重命名为与$ sql2不同的东西,但没有发生任何不同。有什么建议?提前谢谢!

1 个答案:

答案 0 :(得分:1)

有一个类似的问题,我的第一张桌子有效,但第二张没有。

function Create_Tables_Super_Farm()
{

global $wpdb;

$charset_collate = $wpdb->get_charset_collate();

// Calendar Events
$table_name = $wpdb->prefix . "calendarevents"; 
$table_name2 = $wpdb->prefix . "changelogs"; 
$sql = "CREATE TABLE IF NOT EXISTS $table_name (
  ID int(11) NOT NULL AUTO_INCREMENT,
  timestamp datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  TypeID int(11) NOT NULL,
  CustomerID int(11) NOT NULL,
  SeedID int(11) NOT NULL,
  Date datetime NOT NULL,
  Title varchar(250) NOT NULL,
  Description varchar(500) DEFAULT NULL,
  PRIMARY KEY (ID),
  UNIQUE KEY ID_UNIQUE (ID)
) $charset_collate ;";
$sql2 = "CREATE TABLE IF NOT EXISTS $table_name2 (
  ID int(11) NOT NULL AUTO_INCREMENT,
  timestamp datetime DEFAULT CURRENT_TIMESTAMP,
  EmployeeID int(11) DEFAULT NULL,
  TableID int(11) DEFAULT NULL,
  Table varchar(500) DEFAULT NULL,
  Field varchar(500) DEFAULT NULL,
  Before varchar(5000) DEFAULT NULL,
  After varchar(5000) DEFAULT NULL,
  PRIMARY KEY (ID),
  UNIQUE KEY ID_UNIQUE (ID)
) $charset_collate ;";
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
dbDelta( $sql );
dbDelta( $sql2 );
}

尝试删除“`”char我在做之前无法得到任何东西。 覆盖$ sql变量不应该导致问题。最好的我可以告诉dbDelta非常挑剔,我错过了一个空间或什么的。到目前为止找不到任何帮助会很棒。