web-dev-qa-db-fra.com

$ wpdb ne renvoie pas de données

J'ai l'impression que la réponse à mon problème va être très simple. J'ai écrit le code suivant pour accéder à une table que j'ai chargée dans ma base de données WordPress. Je peux exécuter la requête dans phpMyAdmin. Il fonctionne comme prévu. J'ai essayé tout ce que j'ai trouvé pour tenter de le faire fonctionner.

Ma fonction:

function plcoa_email_address_list () {
    global $wpdb;

    $user_count = $wpdb->get_var( "SELECT COUNT(*) FROM tblLots" );
    echo "<p>Lot count is " . $user_count . "</p>";
    $wpdb->show_errors( true );
    $result = $wpdb->get_results($wpdb->prepare("SELECT LotNum FROM tblLots;" ));
    $wpdb->print_error();
    if ($result->num_rows > 0) {
        // output data of each row
        while($row = $result->fetch_assoc()) {
            echo $row["email"] . "<br>";
        }
    } else {
        echo " <br>  0 results";
    }
}  
function plcoa_short_code( $atts=null, $content=null ){
    extract(shortcode_atts(array('id'=>''),$atts));
    plcoa_email_address_list ();
}
add_shortcode('listemails','plcoa_short_code');

Le résultat que j'obtiens est:

Le nombre de lot est de 369

Erreur de base de données WordPress: [] SELECT LotNum FROM tblLots;

0 résultats

2
Bud

Voici votre problème:

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {

$result n'est pas un objet mysqli_result, il s'agit littéralement des résultats de la requête. Etant donné que vous n'avez jamais passé un second paramètre à la méthode get_results en spécifiant le format dans lequel vous les vouliez, cela supposera "OBJECT", de sorte que l'utilisation correcte serait:

$results = $wpdb->get_results("SELECT * FROM tblLots" );
if ( !empty( $results ) ) {
    // output data of each row
    foreach ( $results as $row ) {
        echo $row['email'];

Remarquez que j'ai également corrigé une erreur dans l'instruction SQL. Vous avez uniquement demandé à la base de données le champ LotNum, puis tenté de récupérer le courrier électronique dans l'attente d'une ligne complète de la base de données, alors que vous ne demandiez qu'une seule colonne.

Notez également que tout cela est détaillé dans le codex et dans le hub de développement, dans les documents officiels de wp.org

2
Tom J Nowell