2016-08-12 27 views
0

好吧,所以我試圖設置團隊varchar爲一個UNIQUE KEY,以便它會觸發下面的重複鍵功能聲明WordPress插件數據庫創建 - 如何添加多個「UNIQUE KEY」插件上的表激活

$sql = "INSERT INTO {$wpdb->prefix}vote4team (team,votes) VALUES (%s,%i) ON DUPLICATE KEY UPDATE votes = votes + %i"; 

我錯過了什麼?

這裏是創建數據庫功能withing我PluginFunctions.php

function create_vote4team_db() { 
    global $wpdb; 
    global $vote4team_db_version; 

    $table_name = $wpdb->prefix . "vote4team"; 
    $charset_collate = $wpdb->get_charset_collate(); 

    $sql = "CREATE TABLE $table_name (
    id mediumint(9) NOT NULL AUTO_INCREMENT, 
    time datetime DEFAULT '0000-00-00 00:00:00' NOT NULL, 
    team varchar(255) NOT NULL, 
    votes int(11) NOT NULL, 
    UNIQUE KEY id (id), 
    UNIQUE KEY team (team) 

) $charset_collate;"; 

    require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); 
    dbDelta($sql); 

    add_option('vote4team_db_version', $vote4team_db_version); 

} 

register_activation_hook(__FILE__, 'create_vote4team_db'); 

回答

1

我最終在phpmyAmin和一些SQL文檔的幫助下解決了這個問題。顯然,唯一密鑰的大小是有限制的。有一次,我改變了

team varchar(255) NOT NULL喜歡的東西team varchar(200) NOT NULL

較小它的工作。

+0

其實我試過char(32)來解決這個問題 –

0

我猜想,該語句將失敗,並類型轉換失敗而不是唯一約束失敗。

在您的創建語句中,有一個名爲「id」的唯一索引,其中一列爲「id」,另一個索引爲「city」,並帶有一列「team」。

在插入語句中,您試圖更新名爲「city」的列,該列可能應該是「team」,並且您的values子句的字符串和整數值顛倒過來。

+0

好吧,於是我將列名和索引更改爲團隊,它仍然不會在插件激活時創建表。這很奇怪,因爲在phpMyAdmin中它沒有問題。但是,當我刪除'UNIQUE KEY團隊(團隊)'它的作品。 –

+0

我會嘗試打破創建表的索引創建。 – suthsc

0

嘗試使id爲主鍵,結果將與兩個唯一鍵相同。

我在我自己的插件中定義了一個主鍵和一個唯一鍵,但我從未嘗試過兩個唯一鍵。注意關鍵字PRIMARY KEY和定義之間的兩個空格,dbdelta有點古怪,由於某種原因需要兩個空格。

$sql = "CREATE TABLE $table_name (
    id mediumint(9) NOT NULL AUTO_INCREMENT, 
    time datetime DEFAULT '0000-00-00 00:00:00' NOT NULL, 
    team varchar(255) NOT NULL, 
    votes int(11) NOT NULL, 
    PRIMARY KEY id (id), 
    UNIQUE KEY team (team) 

) $charset_collate;"; 
+0

我試着從'UNIQUE KEY'切換到'PRIMARY KEY',並複製粘貼你的代碼,但仍然沒有。我也將這兩個語句粘貼到phpMyAdmin中,它工作。是否還有其他可能影響將此表添加到數據庫的內容? –

+0

我也認爲可能時間是一個關鍵字,所以我加了反引號,並沒有工作... –

+0

不要使用反向嘀嗒,codex明確告訴你後面的蜱或圍繞列名稱的撇號將無法正常工作。在這段代碼之後,你檢查了$ wpdb-> last_error的值了嗎?這可能會給你一些洞察,問題是什麼 – RelativePHPNewbie

相關問題