2011-06-28 18 views
2

这是我遇到的一个错误。它发生在我在Wordpress中使用dbDelta函数时。我无法弄清楚,也许别人有类似的经历?我的代码:dbDelta/SQL错误,非常意外

$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结构中没有任何需要改变的东西。

回答

-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甚至fussier比法典提到。

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

global $wpdb; 

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

它没有工作,但它改变了错误消息 ALTER TABLE wp_stocks_0 ADD PRIMARY KEY ('id'):/ –

+0

如果你使用这里提到的if语句,那么对表结构的未来改变将不会被执行。除非你100%确定,否则将来不会修改表结构,我会避免这种构造。 –

7

一迟了一点 - 但是在寻找相同错误消息的解决方案时发现了这个问题 - 我为其他任何发现此问题的人添加了一个答案:

来自代码文档http://codex.wordpress.org/Creating_Tables_with_Plugins

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

问题解决了,我

2

我的问题是,我不得不之间的“创建表”和表名的额外空间。

我:

$sqlOptions = "CREATE TABLE $options_table_name (

地方,我需要:

$sqlOptions = "CREATE TABLE $options_table_name (

挑剔功能

+0

我缺少表名后的空格。非常挑剔。 – jasonlfunk