Réponses:
Vous pouvez exécuter des instructions SQL arbitraires avec wpdb :: query () , y compris des instructions de définition de données, par exemple
function
create_index ()
{
global $wpdb ;
$sql = "CREATE INDEX my_index ON {$wpdb->prefix}my_table (my_column)" ;
$wpdb->query ($sql) ;
return ;
}
Remarque: Parce que $wpdb->query()
peut exécuter du SQL arbitraire , si l'instruction que vous lui passez contient N'IMPORTE QUELLE entrée utilisateur, vous devez utiliser wpdb :: prepare () pour vous protéger contre les attaques par injection SQL.
Mais cela soulève la question: comment avez-vous créé vos tables spécifiques aux plugins? "Manuellement" ou par programme? Si par programme, ne l'avez-vous pas utilisé $wpdb->query()
? Si vous l'avez fait "manuellement", vous devez vraiment créer les tables (et leurs index) lors de l'activation du plugin.
Voir l'excellente réponse à cette autre question WPSE pour savoir comment se connecter à l'activation du plugin (et / ou la désactivation et la désinstallation) pour faire des choses comme créer des tables privées.
En utilisant dbDelta, en plus d'une CLÉ PRIMAIRE, vous pouvez inclure le mot CLÉ pour créer un index pour d'autres colonnes:
Vous devez utiliser le mot clé KEY plutôt que son synonyme INDEX et vous devez inclure au moins une KEY.
Exemple de schema.php dans le noyau:
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;