web-dev-qa-db-fra.com

Récupérer une valeur d'une base de données wp

pourquoi mon instruction SQL ne renvoie aucune valeur .. est-ce faux?

<?php

        global $wpdb;
        $result = $wpdb->get_results($wpdb->prepare("SELECT * FROM $wpdb->wp_frm_item_metas"));
        foreach ($result as $item){
            $eventname= $result->meta_value;
        }

        ?>

        <h2><?php echo $eventname;?></h2>

Ce que je fais, c’est que j’affiche les données stockées dans la base de données sous une forme formidable .. (non pro) .. Y at-il un problème avec mon code?

1
markyeoj

Je crois que pour votre fonction foreach devrait être comme ci-dessous:

foreach ($result as $item){
            $eventname= $item->meta_value;
        }
3
Joiwoo

Il y a plusieurs problèmes avec votre code.

  1. À moins que vous, ou un plugin, ayez ajouté wp_frm_item_metas à $wpdb, $wpdb n'a aucune idée de ce que $wpdb->wp_frm_item_metas est. Vous obtiendrez une erreur "Propriété non définie" et votre requête ne fonctionnera pas.

    Vous ne pouvez pas simplement utiliser $wpdb-> plus un nom de table. Ça ne marchera pas. Vous devez ajouter la propriété à $wpdb, ce qui n'est pas si difficile à faire .

  2. Votre foreach est faux. Vous êtes en boucle sur $results, mais à chaque itération, vous devez accéder à $item et non à $result. Ainsi:

    foreach ($result as $item){
      echo $item->meta_value;
    }
    
  3. Cependant, votre requête ne contient pas de clause limitant le login - pas de clause WHERE - elle retournera donc toutes les lignes de la table wp_frm_item_metas. Donc, soit vous avez besoin de ça ... foreach ($ result as $ item) {$ eventname [] = $ item-> meta_value; } ..., ce qui n'a pas de sens étant donné votre tentative de echo $eventname;
  4. Ou votre requête et votre choix de la méthode $wpdb sont incorrects. Il me semble que vous avez besoin de quelque chose de plus proche:

    $eventname = $wpdb->get_var(
      $wpdb->prepare(
        "SELECT meta_value* FROM $wpdb->wp_frm_item_metas WHERE something = %s",
        'something'
      )
    );
    

    Vous pouvez maintenant echo $eventname sans le souci de la boucle.

  5. Remarquez comment j'ai modifié l'appel à la méthode prepare. $wpdb->prepare doit avoir deux arguments. Votre code aurait également échoué à ce stade.

Pour référence: https://codex.wordpress.org/Class_Reference/wpdb

Et veuillez activer le débogage pendant que vous travaillez. Vous auriez repéré une bonne partie de cela si vous aviez suivi cette règle simple.

1
s_ha_dum