Comment ajouter un index à la table de base de données de plug-in


10

J'ai créé des tables supplémentaires pour un plugin que je développe et j'ai besoin d'ajouter des index à ces tables.

Quelle est la façon WordPress de le faire?

L'utilisation dbDelta()ne semble pas fonctionner, et je ne vois aucune erreur dans les journaux.

Réponses:


4

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.


Merci d'avoir répondu à cette question même si elle a 5 mois. J'ai fini par le faire mais je ne savais pas si c'était la "bonne façon". Sera d'une grande aide la prochaine fois que j'essaierai de le faire.
Milk

@Milk Mon plaisir. Je pensais que vous aviez déjà résolu votre problème ou que vous aviez abandonné :-) J'ai répondu (même à 5 mois après avoir demandé) pour aider ceux qui ont le même problème et rechercher WPSE et trouver votre question.
Paul 'Sparrow Hawk' Biron

3

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;

Source: codex - Création de tables avec des plugins

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.