wake-up-neo.com

So fügen Sie einen Index zur Plugin-Datenbanktabelle hinzu

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

Wie geht das mit WordPress?

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

9
Milk

Sie können willkürlich 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()beliebig SQL ausführen kann, sollten Sie wpdb :: verwenden, wenn die Anweisung, die Sie übergeben,BELIEBIGEBenutzereingaben enthält. prepare () zum Schutz vor SQL Injection-Angriffen.

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

In der hervorragenden Antwort auf diese andere WPSE-Frage erfahren Sie, wie Sie das Plugin aktivieren (und/oder deaktivieren und deinstallieren), um beispielsweise private Tabellen zu erstellen.

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

Sie müssen das Schlüsselwort KEY anstelle des Synonymes INDEX verwenden und mindestens einen KEY angeben.

Beispiel aus schema.php in core:

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;

Source: codex - Erstellen von Tabellen mit Plugins

3
froger.me