dbDelta / SQL错误,非常意外

时间:2011-06-28 21:16:01

标签: sql wordpress

这是一个我遇到麻烦的错误。当我在Wordpress中使用dbDelta函数时会发生这种情况。我无法弄清楚,也许其他人有类似的经历?我的代码:

$sql1 = "CREATE TABLE `".$table_name1."` (
`id` INT( 11 ) NOT NULL AUTO_INCREMENT  PRIMARY KEY ,
`blogid` INT( 11 ) NOT NULL ,
`symbol` VARCHAR( 255 ) NOT NULL
) ENGINE = MYISAM";

我在theme_switch动作期间触发此代码。当我打开主题时,似乎没有发生,只有当我切换到别的东西时(我知道,这很奇怪)。我已阅读并试图遵循Wordpress.org中提到的警告,例如在主键和定义之间放置两个空格。我还有另外两个类似的SQL代码生成相同的错误;这三个最初都是由phpMyAdmin生成的,所以我知道它们有效。

Notice: Undefined offset: 1 in /Applications/MAMP/htdocs/wp-experiment/wp-admin/includes/upgrade.php on line 1463

Notice: Undefined offset: 1 in /Applications/MAMP/htdocs/wp-experiment/wp-admin/includes/upgrade.php on line 1463

Notice: Undefined offset: 1 in /Applications/MAMP/htdocs/wp-experiment/wp-admin/includes/upgrade.php on line 1463

WordPress database error: [Multiple primary key defined]
ALTER TABLE wp_stocks_0 CHANGE COLUMN id `id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY

Warning: Cannot modify header information - headers already sent by (output started at /Applications/MAMP/htdocs/wp-experiment/wp-admin/includes/upgrade.php:1463) in /Applications/MAMP/htdocs/wp-experiment/wp-includes/pluggable.php on line 897

如果我误解了dbDelta,我应该补充说,上面的代码执行了几次..所以表已经存在了。但是,如果我理解dbDelta,这意味着它根本不应该做任何事情,因为db结构中没有任何东西需要更改。

3 个答案:

答案 0 :(得分:7)

有点晚了 - 但在搜索相同错误消息的解决方案时发现了这个问题 - 我正在为发现此问题的其他人添加答案:

来自codex docs http://codex.wordpress.org/Creating_Tables_with_Plugins

  
      
  • 您不得在字段名称周围使用任何撇号或反引号。
  •   

为我修好了

答案 1 :(得分:2)

我的问题是'create table'和表名之间有一个额外的空格。

我有:

$sqlOptions = "CREATE TABLE  $options_table_name (

我需要的地方:

$sqlOptions = "CREATE TABLE $options_table_name (

挑剔功能

答案 2 :(得分:-2)

尝试 -

$sql1 = "CREATE TABLE `".$table_name1."` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`blogid` int(11) NOT NULL,
`symbol` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MYISAM";

根据我的经验,dbDelta甚至比法典中提到的更为繁琐。

<强>更新
从你的编辑,我建议你先检查/只创建数据库,如果它还不存在,你可以使用 -

global $wpdb;

if ($wpdb->get_var("show tables like `" . $wpdb->prefix . $table_name1 . "`") != $wpdb->prefix . $table_name1) {
  // your dbDelta query here
}