2011-06-28 17 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