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:
Exemple de schema.php dans le noyau:
Source: codex - Création de tables avec des plugins
la source