Come aggiungere un indice alla tabella del database dei plug-in


10

Ho creato alcune tabelle aggiuntive per un plug-in che sto sviluppando e ho bisogno di aggiungere indici a queste tabelle.

Qual è il modo WordPress per farlo?

L'uso dbDelta()non sembra funzionare e non vedo alcun errore nei registri.

Risposte:


4

È possibile eseguire istruzioni SQL arbitrarie con wpdb :: query () , incluse le dichiarazioni di definizione dei dati, ad es

function
create_index ()
{
    global $wpdb ;

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

    $wpdb->query ($sql) ;

    return ;
}

Nota: poiché è $wpdb->query()possibile eseguire SQL arbitrario , se l'istruzione che viene passata contiene QUALSIASI input dell'utente, è necessario utilizzare wpdb :: prepar () per proteggere dagli attacchi SQL Injection.

Ma questo solleva la domanda: come hai creato le tue tabelle specifiche per i plugin? "Manualmente" o programmaticamente? Se programmaticamente, non hai usato $wpdb->query()? Se lo hai fatto "manualmente", allora dovresti davvero creare le tabelle (e i loro indici) dopo l'attivazione del plugin.

Vedi l'eccellente risposta a questa altra domanda WPSE su come agganciare l'attivazione del plugin (e / o disattivazione e disinstallazione) per fare cose come creare tabelle private.


Grazie per aver risposto a questa domanda anche se ha 5 mesi. Ho finito per farlo, ma non ero sicuro che fosse il "modo giusto". Sarà di grande aiuto la prossima volta che provo a farlo.
Latte

@Milk Piacere mio. Ho pensato che avessi già risolto il tuo problema o che avessi rinunciato :-) Ho risposto (anche se 5mos dopo averlo chiesto) per aiutare gli altri che hanno lo stesso problema e cercare WPSE e trovare la tua domanda.
Paul 'Sparrow Hawk' Biron

3

Usando dbDelta, sopra un PRIMARY KEY, puoi includere la parola KEY per creare un indice per altre colonne:

Devi usare la parola chiave KEY anziché il suo sinonimo INDICE e devi includere almeno un KEY.

Esempio da schema.php nel 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;

Fonte: codex - Creazione di tabelle con plugin

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.