2016-08-12 3 views
0

Ok, also versuche ich das Team varchar auf eine UNIQUE KEY zu setzen, so dass es die doppelte Schlüsselfunktion im folgenden auslösen wird AussageWordpress plugin Datenbankerstellung - Wie man mehrere "UNIQUE KEY's" zur Tabelle auf Plugin hinzufügen aktiviert

was fehlt mir?

hier ist die DB-Funktion erstellen withing meine 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'); 

Antwort

1

Ich löste schließlich dieses Problem mit Hilfe von phpmyAmin und einigen SQL-Dokumenten. Offensichtlich gibt es eine Grenze dafür, wie groß der einzigartige Schlüssel sein kann. Sobald ich

team varchar(255) NOT NULL etwas kleiner wie team varchar(200) NOT NULL geändert

Es funktionierte.

+0

Eigentlich versuchte ich Char (32), um dieses Problem zu lösen –

0

Ich würde vermuten, dass die Aussage mit einem Typ Konvertierungsfehler fehlschlagen würde eher dann eine eindeutige Einschränkung Versagen.

In Ihrer create-Anweisung gibt es einen eindeutigen Index namens "id" mit einer einzelnen Spalte "id" und einen zweiten Index namens "city" mit einer einzigen Spalte "team".

In der Anweisung insert versuchen Sie, eine Spalte namens "city" zu aktualisieren, die wahrscheinlich "team" sein sollte, und in der Klausel "values" werden die Werte für string und integer umgekehrt.

+0

ok, also habe ich den Spaltennamen und den Index in team geändert und er erstellt immer noch keine Tabelle für die Aktivierung des Plugins. Das ist komisch, weil es in phpMyAdmin kein Problem ist. Aber wenn ich das 'UNIQUE KEY-Team (Team) entferne', funktioniert es. –

+0

Ich würde versuchen, die Indexerstellung aus der Tabellenerstellung zu brechen. – suthsc

0

Versuchen Sie ID einen Primärschlüssel, das Ergebnis wird das gleiche wie zwei eindeutige Schlüssel sein.

Ich habe Tabellen in meinem eigenen Plugin, die einen primären und einen eindeutigen Schlüssel definieren, aber ich habe nie zwei eindeutige Schlüssel versucht. Beachten Sie die zwei Leerzeichen zwischen den Schlüsselwörtern PRIMARY KEY und der Definition, dbdelta ist etwas eigenartig und benötigt aus irgendeinem Grund zwei Leerzeichen.

$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

Ich habe versucht, von 'UNIQUE KEY' zu' PRIMARY KEY' zu wechseln und kopiert Ihren Code eingefügt und immer noch nichts. Ich habe auch beide Anweisungen in phpMyAdmin eingefügt und es hat funktioniert. Gibt es noch etwas, das das Hinzufügen dieser Tabelle zur Datenbank bewirken könnte? –

+0

Ich dachte auch, dass Zeit ein Schlüsselwort ist, also habe ich Backticks hinzugefügt und das hat nicht funktioniert ... –

+0

Verwenden Sie keine Back-Ticks, der Codex sagt Ihnen speziell zurück Ticks oder Apostrophen um Spaltennamen wird nicht funktionieren. Hast du nach diesem Code den Wert von $ wpdb-> last_error überprüft? Das könnte Ihnen einen Einblick geben, was das Problem ist. – RelativePHPNewbie