Hinzufügen eines Index zur Plugin-Datenbanktabelle


10

Ich habe einige zusätzliche Tabellen für ein Plugin erstellt, das ich entwickle, und muss diesen Tabellen Indizes hinzufügen.

Was ist der WordPress-Weg, um dies zu tun?

Die Verwendung dbDelta()scheint nicht zu funktionieren, und in den Protokollen wird kein Fehler angezeigt.

Antworten:


4

Sie können beliebige SQL-Anweisungen mit wpdb :: query () ausführen , einschließlich Datendefinitionsanweisungen, z

function
create_index ()
{
    global $wpdb ;

    $sql = "CREATE INDEX my_index ON {$wpdb->prefix}my_table (my_column)" ;

    $wpdb->query ($sql) ;

    return ;
}

Hinweis: Da $wpdb->query()ausführen können beliebige SQL, wenn die Anweisung Sie es passieren enthält ANY Benutzereingabe, dann sollten Sie wpdb :: () vorzubereiten gegen SQL - Injection - Angriffe zu schützen.

Dies wirft jedoch die Frage auf: Wie haben Sie Ihre Plugin-spezifischen Tabellen erstellt? "Manuell" oder programmatisch? Wenn programmgesteuert, haben Sie nicht verwendet $wpdb->query()? Wenn Sie es "manuell" gemacht haben, sollten Sie die Tabellen (und ihre Indizes) bei der Aktivierung des Plugins wirklich erstellen.

In der hervorragenden Antwort auf diese andere WPSE-Frage erfahren Sie, wie Sie sich in die Plugin-Aktivierung (und / oder Deaktivierung und Deinstallation) einbinden können, um beispielsweise private Tabellen zu erstellen.


Vielen Dank für die Beantwortung dieser Frage, obwohl sie 5 Monate alt ist. Am Ende tat ich das, war mir aber nicht sicher, ob es der "richtige Weg" war. Wird eine große Hilfe sein, wenn ich das nächste Mal versuche, dies zu tun.
Milch

@ Milch Mein Vergnügen. Ich dachte, Sie hätten Ihr Problem entweder bereits gelöst oder aufgegeben :-) Ich beantwortete es (sogar bis zu 5 Monate nach Ihrer Anfrage), um anderen zu helfen, die das gleiche Problem haben, WPSE zu suchen und auf Ihre Frage zu stoßen.
Paul 'Sparrow Hawk' Biron

3

Mit dbDelta können Sie über einem PRIMARY KEY das Wort KEY einfügen, um einen Index für andere Spalten zu erstellen:

Sie müssen das Schlüsselwort KEY anstelle des Synonym INDEX verwenden und mindestens einen KEY einschließen.

Beispiel aus schema.php im Kern:

CREATE TABLE $wpdb->termmeta (
  meta_id bigint(20) unsigned NOT NULL auto_increment,
  term_id bigint(20) unsigned NOT NULL default '0',
  meta_key varchar(255) default NULL,
  meta_value longtext,
  PRIMARY KEY  (meta_id),
  KEY term_id (term_id),
  KEY meta_key (meta_key($max_index_length))
) $charset_collate;

Quelle: Codex - Erstellen von Tabellen mit Plugins

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.