WordPress.org

Langues: English * Italiano * 日本語 Русский • 中文 (体体) • 中文 (繁體) *어어 • (Ajoutez votre langue)

Parler à la base de données: La classe wpdb

WordPress définit une classe appelée wpdb, qui contient un ensemble de fonctions utilisées pour interagir avec une base de données. Son objectif principal est de fournir une interface avec la base de données WordPress, mais peut être utilisé pour communiquer avec toute autre base de données appropriée. Le code source de la classe est vaguement basé sur la classe ezSQL; écrit et maintenu par Justin Vincent

En utilisant l’objet $wpdb

Avertissement: Les méthodes de la classe wpdb() ne doivent pas être appelées directement. Utilisez plutôt l’objet global $wpdb !

WordPress fournit une variable objet globale, $wpdb, qui est une instanciation de la classe wpdb définie dans /wp-includes/wp-db.php. Par défaut, $wpdb est instancié pour parler à la base de données WordPress. Pour accéder à $wpdb dans votre code PHP WordPress, déclarez $wpdb comme variable globale en utilisant le global keyword, ou utilisez le superglobal $GLOBALS de la manière suivante:

// 1st Method - Declaring $wpdb as global and using it to execute an SQL query statement that returns a PHP objectglobal $wpdb;$results = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}options WHERE option_id = 1", OBJECT );// 2nd Method - Utilizing the $GLOBALS superglobal. Does not require global keyword ( but may not be best practice )$results = $GLOBALS->get_results( "SELECT * FROM {$wpdb->prefix}options WHERE option_id = 1", OBJECT );

L’objet $wpdb n’est pas limité aux tables par défaut créées par WordPress ; il peut être utilisé pour lire les données de n’importe quelle table de la base de données WordPress (telles que les tables de plugins personnalisées). Par exemple, pour SÉLECTIONNER des informations dans une table personnalisée appelée « mytable », vous pouvez procéder comme suit.

$myrows = $wpdb->get_results( "SELECT id, name FROM mytable" );

L’objet $wpdb peut parler à n’importe quel nombre de tables, mais uniquement à une base de données à la fois ; par défaut, la base de données WordPress. Dans les rares cas où vous devez vous connecter à une autre base de données, vous devrez instancier votre propre objet de la classe wpdb avec vos propres informations de connexion à la base de données. Pour des configurations extrêmement compliquées avec de nombreuses bases de données, envisagez plutôt d’utiliser hyperdb.

Un avertissement

Certaines des fonctions de cette classe prennent une instruction SQL en entrée. Vous devez échapper SQL à toutes les valeurs non approuvées que vous incorporez dans la requête SQL pour empêcher les attaques par injection SQL. Consultez la documentation pour voir si la fonction que vous prévoyez d’utiliser échappe SQL pour vous ou s’attend à ce qu’elle soit pré-échappée.

Pour en savoir plus sur l’échappement SQL dans WordPress, consultez la section intitulée Protéger les requêtes contre les attaques par injection SQL ci-dessous.

SÉLECTIONNEZ une variable

La fonction get_var renvoie une seule variable de la base de données. Bien qu’une seule variable soit renvoyée, le résultat complet de la requête est mis en cache pour une utilisation ultérieure. Renvoie NULL si aucun résultat n’est trouvé.

<?php $wpdb->get_var( 'query', column_offset, row_offset ); ?>

requête (chaîne) La requête que vous souhaitez exécuter. La définition de ce paramètre ànullrenverra la variable spécifiée à partir des résultats mis en cache de la requête précédente. column_offset (entier) La colonne souhaitée (0 étant la première). La valeur par défaut est 0. row_offset(entier) La ligne souhaitée (0 étant la première). La valeur par défaut est 0.

Exemples

Récupérez et affichez le nombre d’utilisateurs.

<?php$user_count = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->users" );echo "<p>User count is {$user_count}</p>";?>

Récupère et affiche la somme d’une valeur de champ personnalisée.

<?php// set the meta_key to the appropriate custom field meta key$meta_key = 'miles';$allmiles = $wpdb->get_var( $wpdb->prepare( "SELECT sum(meta_value) FROM $wpdb->postmeta WHERE meta_key = %s", $meta_key) );echo "<p>Total miles is {$allmiles}</p>";?> 

SÉLECTIONNEZ une ligne

Pour récupérer une ligne entière d’une requête, utilisez get_row. La fonction peut renvoyer la ligne sous forme d’objet, de tableau associatif ou de tableau indexé numériquement. Si plusieurs lignes sont renvoyées par la requête, seule la ligne spécifiée est renvoyée par la fonction, mais toutes les lignes sont mises en cache pour une utilisation ultérieure. Renvoie NULL si aucun résultat n’est trouvé, tenez-en compte lors de l’utilisation de la valeur renvoyée dans les arguments, voir l’exemple ci-dessous.

<?php $wpdb->get_row('query', output_type, row_offset); ?>

requête (chaîne) La requête que vous souhaitez exécuter. output_type Une des trois constantes prédéfinies. Par défaut, OBJECT.

  • OBJECT-result sera affiché en tant qu’objet.
  • ARRAY_A-result sera affiché sous forme de tableau associatif.
  • ARRAY_N – result sera affiché sous la forme d’un tableau indexé numériquement.

row_offset (entier) La ligne souhaitée (0 étant la première). La valeur par défaut est 0.

Exemples

Obtenez toutes les informations sur le lien 10.

$mylink = $wpdb->get_row( "SELECT * FROM $wpdb->links WHERE link_id = 10" );

Les propriétés de l’objet $mylink sont les noms de colonnes du résultat de la requête SQL (dans cet exemple toutes les colonnes de la table $wpdb->links, mais vous pouvez également interroger uniquement des colonnes spécifiques).

echo $mylink->link_id; // prints "10"

En revanche, l’utilisation de

$mylink = $wpdb->get_row( "SELECT * FROM $wpdb->links WHERE link_id = 10", ARRAY_A );

entraînerait un tableau associatif:

echo $mylink; // prints "10"

et

$mylink = $wpdb->get_row( "SELECT * FROM $wpdb->links WHERE link_id = 10", ARRAY_N );

entraînerait un tableau indexé numériquement:

echo $mylink; // prints "10"

S’il n’y a pas d’enregistrement avec l’ID 10 dans la table des liens, null sera renvoyé. Ce qui suit serait alors faux:

if ( null !== $mylink ) { // do something with the link return true;} else { // no link found return false;}

SÉLECTIONNEZ une colonne

Pour SÉLECTIONNER une colonne, utilisez get_col. Cette fonction génère un tableau unidimensionnel. Si plusieurs colonnes sont renvoyées par la requête, seule la colonne spécifiée sera renvoyée par la fonction, mais le résultat entier est mis en cache pour une utilisation ultérieure. Renvoie un tableau vide si aucun résultat n’est trouvé.

<?php $wpdb->get_col( 'query', column_offset ); ?>

requête (chaîne) la requête que vous souhaitez exécuter. La définition de ce paramètre ànullrenverra la colonne spécifiée à partir des résultats mis en cache de la requête précédente. column_offset (entier) La colonne souhaitée (0 étant la première). La valeur par défaut est 0.

Exemples

Pour cet exemple, supposons que le blog soit consacré à des informations sur les automobiles. Chaque article décrit une voiture particulière (par exemple Ford Mustang 1969), et trois champs personnalisés, fabricant, modèle et année, sont attribués à chaque article. Cet exemple affichera les titres des publications, filtrés par un fabricant particulier (Ford) et triés par modèle et par année.

La forme get_col de la classe wpdb est utilisée pour renvoyer un tableau de tous les id de publication répondant aux critères et triés dans le bon ordre. Ensuite, une construction foreach est utilisée pour parcourir ce tableau d’ID de publication, affichant le titre de chaque publication. Notez que le SQL de cet exemple a été créé par Andomar.

<?php $meta_key1= 'model';$meta_key2= 'year';$meta_key3= 'manufacturer';$meta_key3_value= 'Ford';$postids=$wpdb->get_col( $wpdb->prepare( "SELECT key3.post_idFROM $wpdb->postmeta key3INNER JOIN $wpdb->postmeta key1 ON key1.post_id = key3.post_id AND key1.meta_key = %s INNER JOIN $wpdb->postmeta key2 ON key2.post_id = key3.post_id AND key2.meta_key = %sWHERE key3.meta_key = %s AND key3.meta_value = %sORDER BY key1.meta_value, key2.meta_value",$meta_key1, $meta_key2, $meta_key3, $meta_key3_value) ); if ( $postids ) {echo "List of {$meta_key3_value}(s), sorted by {$meta_key1}, {$meta_key2}";foreach ( $postids as $id ) { $post = get_post( intval( $id ) );setup_postdata( $post );?><p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p><?php} }?>

Cet exemple répertorie tous les messages contenant un champ personnalisé particulier, mais triés par la valeur d’un deuxième champ personnalisé.

<?php// List all posts with custom field Color, sorted by the value of custom field Display_Order// does not exclude any 'post_type'// assumes each post has just one custom field for Color, and one for Display_Order$meta_key1 = 'Color';$meta_key2 = 'Display_Order';$postids = $wpdb->get_col( $wpdb->prepare( "SELECT key1.post_idFROM $wpdb->postmeta key1INNER JOIN $wpdb->postmeta key2 ON key2.post_id = key1.post_id AND key2.meta_key = %sWHERE key1.meta_key = %sORDER BY key2.meta_value+(0) ASC", $meta_key2,$meta_key1) ); if ( $postids ) {echo "List of {$meta_key1} posts, sorted by {$meta_key2}";foreach ( $postids as $id ) {$post = get_post( intval( $id ) );setup_postdata( $post );?><p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p><?php}}?>

SÉLECTIONNEZ Résultats génériques

Génériques, les résultats de plusieurs lignes peuvent être extraits de la base de données avec get_results. La fonction renvoie le résultat complet de la requête sous forme de tableau. Chaque élément de ce tableau correspond à une ligne du résultat de la requête et, comme get_row, peut être un objet, un tableau associatif ou un tableau numéroté. Si aucune ligne correspondante n’est trouvée ou s’il y a une erreur de base de données, la valeur de retour sera un tableau vide. Si votre chaîne $query est vide ou si vous passez un invalidoutput_type invalide, NULL sera renvoyé.

<?php $wpdb->get_results( 'query', output_type ); ?>

requête (chaîne) La requête que vous souhaitez exécuter. output_type Une des quatre constantes prédéfinies. Par défaut, OBJECT. Voir SÉLECTIONNER une ligne et ses exemples pour plus d’informations.

  • OBJECT-result sera affiché sous la forme d’un tableau indexé numériquement d’objets de ligne.
  • OBJECT_K-result sera affiché sous la forme d’un tableau associatif d’objets de ligne, en utilisant les valeurs de la première colonne comme clés (les doublons seront supprimés).
  • ARRAY_A-result sera affiché sous la forme d’un tableau indexé numériquement de tableaux associatifs, en utilisant des noms de colonnes comme clés.
  • ARRAY_N – result sera affiché sous la forme d’un tableau indexé numériquement de tableaux indexés numériquement.

Puisque cette fonction utilise la fonctionquerywpdb->query(), toutes les variables de classe sont correctement définies. Les résultats comptent pour une requête ‘SELECT’ seront stockés dansnumwpdb->num_rows.

Exemples

Obtenez les ID et les titres de tous les Brouillons par l’utilisateur 5 et faites écho aux Titres.

$fivesdrafts = $wpdb->get_results( "SELECT ID, post_title FROM $wpdb->postsWHERE post_status = 'draft' AND post_author = 5");foreach ( $fivesdrafts as $fivesdraft ) {echo $fivesdraft->post_title;}

Obtenez toutes les informations sur les brouillons par l’utilisateur 5.

<?php$fivesdrafts = $wpdb->get_results( "SELECT * FROM $wpdb->postsWHERE post_status = 'draft' AND post_author = 5");if ( $fivesdrafts ){foreach ( $fivesdrafts as $post ){setup_postdata( $post );?><h2><a href="<?php the_permalink(); ?>" rel="bookmark" title="Permalink: <?php the_title(); ?>"><?php the_title(); ?></a></h2><?php}}else{?><h2>Not Found</h2><?php}?>

INSÉRER une ligne

Insérer une ligne dans un tableau.

<?php $wpdb->insert( $table, $data, $format ); ?>

table (chaîne) Nom de la table dans laquelle insérer des données. données (tableau) Données à insérer (dans les paires de valeurs column= >). Les colonnes $data et les valeurs $data doivent être  » brutes » (aucune ne doit être échappée SQL). format (tableau/chaîne) (facultatif) Un tableau de formats à mapper à chacune des valeurs dedatadata. Si string, ce format sera utilisé pour toutes les valeurs dedatadata. Si elle est omise, toutes les valeurs dedatadata seront traitées comme des chaînes, sauf indication contraire dans wpdb::fielfield_types.

Valeurs de format possibles: %s sous forme de chaîne; %d sous forme d’entier (nombre entier); et %f sous forme flottante. (Voir ci-dessous pour plus d’informations.)

Après insertion, l’ID généré pour la colonne AUTO_INCREMENT est accessible avec:

$wpdb->insert_id

Cette fonction renvoie false si la ligne n’a pas pu être insérée. Sinon, il renvoie le nombre de lignes affectées (qui sera toujours 1).

Remarque : La partie valeur de la colonne du paramètre de données = > paires de valeurs doit être scalaire. Si vous passez un tableau (ou un objet) comme valeur à insérer, vous générerez un avertissement similaire à « mysql_real_escape_string() attend que le paramètre 1 soit une chaîne, tableau donné à la ligne 880 dans le fichier /var/www/html/wp-includes/wp-db.php ».

Exemples

Insérer deux colonnes d’affilée, la première valeur étant une chaîne et la seconde un nombre:

$wpdb->insert( 'table', array( 'column1' => 'value1', 'column2' => 123 ), array( '%s', '%d' ) );

REMPLACER la ligne

Remplacer une ligne dans une table si elle existe ou insérer une nouvelle ligne dans une table si la ligne n’existait pas déjà.

<?php $wpdb->replace( $table, $data, $format ); ?>

table (chaîne) Nom de la table dans laquelle remplacer les données. données (tableau) Données à remplacer (dans la colonne = > paires de valeurs). Les colonnes $data et les valeurs $data doivent être  » brutes » (aucune ne doit être échappée SQL). format (tableau/chaîne) (facultatif) Un tableau de formats à mapper à chacune des valeurs dedatadata. Si string, ce format sera utilisé pour toutes les valeurs dedatadata. Si elle est omise, toutes les valeurs dedatadata seront traitées comme des chaînes, sauf indication contraire dans wpdb::fielfield_types.

Valeurs de format possibles: %s sous forme de chaîne; %d sous forme d’entier (nombre entier); et %f sous forme flottante. (Voir ci-dessous pour plus d’informations.)

Si la longueur d’un élément de chaîne dans le paramètre arraydata array est plus longue que la longueur définie dans la table de base de données MySQL, l’insertion échouera, cette fonction retournera false, mais falsewpdb-> last_error ne sera pas définie sur un message descriptif. Vous devez vous assurer que les données que vous souhaitez insérer tiennent dans la base de données – ne supposez pas que MySQL tronquera les données.

Après le remplacement, l’ID généré pour la colonne AUTO_INCREMENT est accessible avec:

$wpdb->insert_id

Cette fonction renvoie un compte pour indiquer le nombre de lignes affectées. C’est la somme des lignes supprimées et insérées. Si le nombre est de 1 pour un REMPLACEMENT à une seule ligne, une ligne a été insérée et aucune ligne n’a été supprimée. Si le nombre est supérieur à 1, une ou plusieurs anciennes lignes ont été supprimées avant l’insertion de la nouvelle ligne. Il est possible qu’une seule ligne remplace plus d’une ancienne ligne si la table contient plusieurs index uniques et que la nouvelle ligne duplique les valeurs de différentes anciennes lignes dans différents index uniques.

Cette fonction renvoie false si une ligne existante n’a pas pu être remplacée et qu’une nouvelle ligne n’a pas pu être insérée.

Exemples

Remplacer une ligne, la première valeur étant l’id de ligne, la deuxième une chaîne et la troisième un nombre:

$wpdb->replace( 'table', array( 'indexed_id' => 1,'column1' => 'value1', 'column2' => 123 ), array( '%d','%s', '%d' ) );

METTRE À JOUR les lignes

Mettre à jour une ligne dans le tableau. Renvoie false if errors, ou le nombre de lignes affectées en cas de succès.

<?php $wpdb->update( $table, $data, $where, $format = null, $where_format = null ); ?>

table (chaîne) Nom de la table à mettre à jour. données (tableau) Données à mettre à jour (en paires de valeurs column=>). Les colonnes $data et les valeurs $data doivent être  » brutes » (aucune ne doit être échappée SQL). Cela signifie que si vous utilisez des données GET ou POST, vous devrez peut-être utiliser stripslashes() pour éviter que les barres obliques ne se retrouvent dans la base de données. where(array) Un tableau nommé de clauses WHERE (en paires de valeurs column= >). Plusieurs clauses seront jointes à ANDs. Les colonneswherewhere et les valeurs shouldwhere doivent être « brutes ». format (tableau/chaîne) (facultatif) Un tableau de formats à mapper à chacune des valeurs dedatadata. Si string, ce format sera utilisé pour toutes les valeurs dedatadata. where_format(array/string) (facultatif) Un tableau de formats à mapper à chacune des valeurs dewherewhere. Si string, ce format sera utilisé pour tous les éléments dewherewhere.

Valeurs de format possibles: %s sous forme de chaîne; %d sous forme d’entier (nombre entier) et %f sous forme flottante. (Voir ci-dessous pour plus d’informations.) Si elles sont omises, toutes les valeurs dewherewhere seront traitées comme des chaînes.

Valeurs de retour: Cette fonction renvoie le nombre de lignes mises à jour, ou false s’il y a une erreur. Gardez à l’esprit que si les données matchescorrespondent à ce qui est déjà dans la base de données, aucune ligne ne sera mise à jour, donc 0 sera renvoyé. Pour cette raison, vous devriez probablement vérifier le retour avec false ===resultresult

Examples

Mettre à jour une ligne, où l’ID est 1, la valeur de la première colonne est une chaîne et la valeur de la deuxième colonne est un nombre:

$wpdb->update( 'table', array( 'column1' => 'value1',// string'column2' => 'value2'// integer (number) ), array( 'ID' => 1 ), array( '%s',// value1'%d'// value2), array( '%d' ) );

Attention: %d ne peut pas gérer les valeurs de virgule – si vous n’utilisez pas de nombres complets, utilisez string/%s.

SUPPRIMER des lignes

La fonction delete a été ajoutée dans WordPress 3.4.0 et peut être utilisée pour supprimer des lignes d’une table. L’utilisation est très similaire à update et insert. Il renvoie le nombre de lignes mises à jour ou false en cas d’erreur.

Utilisation

<?php $wpdb->delete( $table, $where, $where_format = null ); ?>

Paramètres

nametable (chaîne) (obligatoire) Nom de la table. Par défaut : Nonewherewhere(array) (obligatoire) Un tableau nommé de clauses WHERE (en paires de valeurs column->). Plusieurs clauses seront jointes à ANDs. Les colonneswherewhere et les valeurs shouldwhere doivent être « brutes « . Défaut: Nonewherewhere_format(string/array) (facultatif) Un tableau de formats à mapper à chacune des valeurs dewherewhere. S’il s’agit d’une chaîne, ce format sera utilisé pour tous les éléments dewherewhere. Un format est l’un des formats ‘%d’, ‘%f’, ‘%s’ (entier, flottant, chaîne; voir ci-dessous pour plus d’informations). Si elles sont omises, toutes les valeurs dewherewhere seront traitées comme des chaînes, sauf indication contraire dans wpdb::fielfield_types. Par défaut : null

Exemples

// Default usage.$wpdb->delete( 'table', array( 'ID' => 1 ) );// Using where formatting.$wpdb->delete( 'table', array( 'ID' => 1 ), array( '%d' ) );

Exécution de requêtes générales

La fonction query vous permet d’exécuter n’importe quelle requête SQL sur la base de données WordPress. Il est préférable de l’utiliser lorsqu’il existe un besoin de requêtes SQL spécifiques, personnalisées ou complexes. Pour des requêtes plus basiques, telles que la sélection d’informations dans une table, consultez les autres fonctions wpdb ci-dessus telles que get_results, get_var, get_row or get_col.

Syntaxe générale

<?php $wpdb->query('query'); ?>

requête (chaîne) La requête SQL que vous souhaitez exécuter.

Cette fonction renvoie une valeur entière indiquant le nombre de lignes affectées/sélectionnées pour SÉLECTIONNER, INSÉRER, SUPPRIMER, METTRE À JOUR, etc. Pour CRÉER, MODIFIER, TRONQUER et SUPPRIMER des instructions SQL (qui affectent des tables entières au lieu de lignes spécifiques), cette fonction renvoie TRUE en cas de succès. Si une erreur MySQL est rencontrée, la fonction retournera FALSE. Notez que puisque 0 et FALSE peuvent être renvoyés pour les requêtes de ligne, vous devez être prudent lors de la vérification de la valeur de retour. Utilisez l’opérateur d’identité (===) pour vérifier les erreurs (par exemple, false ===resultresult) et si des lignes ont été affectées (par exemple, 0 ===resultresult).

Exemples

Supprimez la clé méta et la valeur ‘gargarisme’ de la publication 13. (Nous ajouterons la méthode « prepare » pour nous assurer que nous n’avons pas affaire à une opération illégale ou à des personnages illégaux):

$wpdb->query( $wpdb->prepare( " DELETE FROM $wpdb->postmeta WHERE post_id = %d AND meta_key = %s", 13, 'gargle' ));

Réalisé dans WordPress par delete_post_meta().

Définissez le parent de la page 15 sur la page 7.

$wpdb->query( $wpdb->prepare( "UPDATE $wpdb->posts SET post_parent = %dWHERE ID = %dAND post_status = %s", 7, 15, 'static') );

Protéger les requêtes contre les attaques par injection SQL

Pour un aperçu plus complet de l’échappement SQL dans WordPress, voir Validation des données de base de données. C’est une lecture incontournable pour tous les contributeurs de code WordPress et les auteurs de plugins.

Toutes les données des requêtes SQL doivent être échappées SQL avant l’exécution de la requête SQL pour éviter les attaques par injection SQL. La méthode prepare exécute cette fonctionnalité pour WordPress, qui prend en charge à la fois une syntaxe de type sprintf() et vsprintf().

Remarque: À partir de 3,5, wpdb::prepare() applique un minimum de 2 arguments.

<?php $sql = $wpdb->prepare( 'query' , value_parameter ); ?>

query (string) La requête SQL que vous souhaitez exécuter, avec des espaces réservés (voir ci-dessous). value_parameter(int|string|array) La valeur à remplacer dans l’espace réservé. De nombreuses valeurs peuvent être transmises en passant simplement plus d’arguments de manière similaire à sprintf(). Alternativement, le deuxième argument peut être un tableau contenant les valeurs comme dans la fonction vsprintf() de PHP. Il faut veiller à ne pas autoriser l’entrée directe de l’utilisateur à ce paramètre, ce qui permettrait la manipulation de tableau de toute requête avec plusieurs espaces réservés. Les valeurs ne peuvent pas être échappées SQL.

Espaces réservés

Le paramètre de requête pour prepare accepte les espaces réservés de type sprintf(). Les formats %s (chaîne), %d (entier) et %f (flottant) sont pris en charge. (Les espaces réservés %s et %d sont disponibles depuis que la fonction a été ajoutée à core dans la version 2.3, %f n’est disponible que depuis la version 3.3.) Tous les autres caractères % peuvent provoquer des erreurs d’analyse à moins qu’ils ne soient échappés. Tous les caractères % dans les littéraux de chaînes SQL, y compris les caractères génériques, doivent être échappés à double% en tant que %%. Tous %d, %f et %s doivent être laissés sans guillemets dans la chaîne de requête. Notez que l’espace réservé %d n’accepte que les entiers, vous ne pouvez donc pas transmettre de nombres qui ont des valeurs de virgule via %d. Si vous avez besoin de valeurs de virgule, utilisez %f comme flottant à la place.

Exemples

Ajouter une clé Meta = > paire de valeurs « Harriet’s Adages » = > « L’interface de base de données de WordPress est comme le dimanche matin: Facile. » au poste 10.

$metakey= "Harriet's Adages";$metavalue= "WordPress' database interface is like Sunday Morning: Easy.";$wpdb->query( $wpdb->prepare( "INSERT INTO $wpdb->postmeta( post_id, meta_key, meta_value )VALUES ( %d, %s, %s )", 10, $metakey, $metavalue ) );

Réalisé dans WordPress par add_meta().

La même requête utilisant la syntaxe de type vsprintf().

$metakey = "Harriet's Adages";$metavalue = "WordPress' database interface is like Sunday Morning: Easy.";$wpdb->query( $wpdb->prepare( "INSERT INTO $wpdb->postmeta( post_id, meta_key, meta_value )VALUES ( %d, %s, %s )", array(10, $metakey, $metavalue) ) );

Notez que dans cet exemple, nous regroupons les valeurs dans un tableau. Cela peut être utile lorsque nous ne connaissons pas le nombre d’arguments que nous devons passer jusqu’à l’exécution.

Notez que vous n’avez pas à vous soucier de citer des chaînes. Au lieu de passer les variables directement dans la requête SQL, utilisez un espace réservé %s pour les chaînes, un %d placedolder pour les entiers et un %f comme espace réservé pour les flottants. Vous pouvez passer autant de valeurs que vous le souhaitez, chacune en tant que nouveau paramètre dans la méthode prepare().

Afficher et masquer les erreurs SQL

Vous pouvez activer et désactiver l’écho d’erreur avec les show_errors et hide_errors, respectivement.

<?php $wpdb->show_errors(); ?>
<?php $wpdb->hide_errors(); ?>

Vous pouvez également imprimer l’erreur (le cas échéant) générée par la requête la plus récente avec print_error.

<?php $wpdb->print_error(); ?>

Remarque : Si vous exécutez WordPress Multisite, vous devez définir la constante DIEONDBERROR pour que les erreurs de base de données s’affichent comme suit:
<?php define( 'DIEONDBERROR', true ); ?>

Obtenir des informations sur les colonnes

Vous pouvez récupérer des informations sur les colonnes du résultat de la requête le plus récent avec get_col_info. Cela peut être utile lorsqu’une fonction a renvoyé un OBJET dont vous ne connaissez pas les propriétés. La fonction affichera les informations souhaitées à partir de la colonne spécifiée, ou un tableau avec des informations sur toutes les colonnes à partir du résultat de la requête si aucune colonne n’est spécifiée.

<?php $wpdb->get_col_info('type', offset); ?>

tapez (chaîne) Les informations que vous souhaitez récupérer. Peut prendre l’une des valeurs suivantes (liste tirée des documents ezSQL). La valeur par défaut est name.

  • nom – nom de la colonne. Défaut.
  • table – nom de la table à laquelle appartient la colonne
  • max_length – longueur maximale de la colonne
  • not_null-1 si la colonne ne peut pas être NULLE
  • primary_key-1 si la colonne est une clé primaire
  • unique_key-1 si la colonne est une clé unique
  • multiple_key – 1 si la colonne est une clé non unique
  • numeric – 1 si la colonne est numérique
  • blob -1 si la colonne est un BLOB
  • type – le type de la colonne
  • unsigned – 1 si la colonne n’est pas signée
  • zerofill -1 si la colonne est nulle – rempli

offset (entier) Spécifiez la colonne à partir de laquelle récupérer les informations (0 étant la première colonne). La valeur par défaut est -1.

  • -1 – Récupère les informations de toutes les colonnes. Sortie sous forme de tableau. Défaut.
  • Entier non négatif – Récupère les informations de la colonne spécifiée (0 étant la première).

Effacement du cache

Vous pouvez effacer le cache de résultats SQL avec flush.

<?php $wpdb->flush(); ?>

Cela efface $wpdb->last_result, $wpdb->last_query et $wpdb->col_info.

Variables de classe

showshow_errors Si l’écho d’erreur est activé ou non. La valeur par défaut est TRUE. numnum_queries Nombre de requêtes exécutées. querylast_query La requête la plus récente à avoir été exécutée. textlast_error Le texte d’erreur le plus récent généré par MySQL. queriesrequêtes Vous pouvez enregistrer toutes les requêtes exécutées sur la base de données et leurs temps d’arrêt en définissant la constante SAVEQUERIES sur TRUE (cette constante est par défaut FALSE). Si SAVEQUERIES vaut TRUE, vos requêtes seront stockées dans cette variable sous forme de tableau. resultslast_result Les résultats de requête les plus récents. colcol_info Les informations de colonne pour les résultats de requête les plus récents. Voir Obtenir Des Informations Sur Les Colonnes. IDID insert_id généré pour une colonne AUTO_INCREMENT par la requête INSERT la plus récente. numnum_rows Le nombre de lignes renvoyées par la dernière requête. prefixpréfixe Le préfixe de table WordPress attribué au site. basbase_préfix Le préfixe d’origine tel que défini dans wp-config.php. Pour multi-sites: Utilisez si vous souhaitez obtenir le préfixe sans le numéro de blog ajouté.

Variables Multi-Sites

Si vous utilisez Multi-Sites, vous avez également accès aux éléments suivants :

blogblogid L’id du site actuel (blog). sitsiteid L’id du réseau actuel (anciennement  » site »). WordPress ne prend actuellement en charge qu’un seul réseau par installation multisite, mais cela pourrait changer à l’avenir. Voir ce qui suit pour plus d’informations:

  • WordPress: différence entre site_id et blog_id?
  • http://stackoverflow.com/a/4189358/1924128 – Une autre bonne réponse à la même question.

Tables

Les tables de base de données WordPress sont facilement référencées dans la classe wpdb.

postsmessages Le tableau des messages. postpostmeta La table Meta Content (alias Champs personnalisés). commentscommentaires Le tableau des commentaires. commentcommentmeta Le tableau contient des informations supplémentaires sur les commentaires. termtermmeta La table termmeta contient les méta-valeurs du terme. termstermes Le tableau des termes contient la « description » des Catégories, des Catégories de liens, des balises. termterm_taxonomy La table term_taxonomy décrit les différentes taxonomies (classes de termes). Les catégories, les Catégories de Liens et les balises sont des taxonomies. termterm_relationships La table des relations de termes contient un lien entre le terme et l’objet qui utilise ce terme, ce qui signifie que ce fichier pointe vers chaque catégorie utilisée pour chaque publication. usersusers La table des utilisateurs. ususermeta La table usermeta contient des informations supplémentaires sur l’utilisateur, telles que des surnoms, des descriptions et des autorisations. linksliens Le tableau des liens. optionsoptions Le tableau des options.

Tables multisite

Ces tables sont utilisées uniquement dans les installations multisite.

blogsblogs Le tableau Blogs contient une liste des blogs (sites) distincts qui ont été mis en place au sein du(des) réseau(s). signinscriptions La table des inscriptions. sitesite La table de site contient une liste des réseaux (précédemment appelés « sites » dans WPMU) qui sont configurés dans l’installation (il n’y a généralement qu’un seul site répertorié dans cette table). sitsitemeta La table des options réseau (Meta du site) contient toutes les options applicables à l’ensemble de l’installation multisite. sitsitecategories Le tableau des catégories de sites. registregistration_log La table du journal d’enregistrement. blogblog_versions Le tableau des versions de Blog.

Fichier source

wpdb() se trouve dans wp-includes/wp-db.php.

Connexe

  • Fonction membre: wpdb::esc_like() – Instructions de type Échappement avant utilisation en SQL.

Articles

  • Article: La boucle – Un aperçu de base de son utilisation de la requête dans la boucle WordPress.
  • Article: Aperçu des requêtes – Explication de la façon de déterminer quelles requêtes génèrent WordPress.
  • Article: Personnalisation des requêtes via Hook
  • Article: Afficher les articles Requête MYSQL à l’aide personnalisée
  • Article: Construire des requêtes avancées sur les Taxonomies
  • Article: Construire une requête personnalisée à l’aide de l’offset et de la pagination

Documentation du code

  • Class: WP_Query – Vue d’ensemble détaillée de la classe WP_Query
  • Class: WP_Comment_Query-Class pour les requêtes liées aux commentaires
  • Class: WP_User_Query-Class pour les requêtes liées aux utilisateurs
  • Objet: Overviewwpdb – Vue d’ensemble sur l’utilisation de l’objet $wpdb
  • Fonction: set_query_var()
  • Fonction: get_query_var()
  • Fonction: query_posts() – Créer une requête personnalisée supplémentaire
  • Fonction: get_post() – Prendre un identifiant d’un élément et renvoyer les enregistrements dans la base de données pour cet article
  • Function: get_posts() – Une fonction spécialisée qui renvoie un tableau d’éléments
  • Function: get_pages() – Une fonction spécialisée qui renvoie un tableau de pages
  • Fonction: have_posts() – Une condition qui détermine si la requête a renvoyé un article
  • Fonction: the_post() – Utilisé pour définir automatiquement la boucle après une requête
  • Fonction : rewind_posts() – Efface la boucle actuelle
  • Fonction: setup_postdata() – Définit les données d’un seul résultat de requête dans une boucle
  • Fonction: wp_reset_postdata() – Restaure la requête précédente (généralement après une boucle dans une autre boucle)
  • Fonction: wp_reset_query()
  • Fonction: is_main_query() – Garantit que la requête en cours de modification est uniquement la requête principale
  • Crochet d’action : pre_get_posts – Modifie les requêtes WordPress avant leur exécution
  • Crochet d’action : the_post – Modifie l’objet post après la requête
  • Crochet de filtre: found_posts – Modifie la valeur de l’objet found_posts WP_Query

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.

Previous post Nourrir le petit
Next post White Sox de Chicago: Brad Hand ne serait pas un mauvais choix