web-dev-qa-db-fra.com

Comment récupérer un tableau dans $ wpdb?

J'ai un extrait qui va sélectionner une donnée de la table de base de données. Mais je rencontre une erreur: Warning: Invalid argument supplied for foreach()

Je rencontre une nouvelle erreur: Notice: Trying to get property of non-objectdans cette ligne echo $result->Name;

Extrait (mis à jour):

$results = $wpdb->get_results( 'SELECT DATE_FORMAT(FROM_UNIXTIME(submit_time), "%b %e, %Y  %l:%i %p") AS Submitted,
                    MAX(IF(field_name="Name", field_value, NULL )) AS "Name",
                    MAX(IF(field_name="Email", field_value, NULL )) AS "Email",
                    MAX(IF(field_name="Subject", field_value, NULL )) AS "Position",
                    MAX(IF(field_name="Message", field_value, NULL )) AS "Message"
                    FROM tablename
                    WHERE form_name = "Resume"
                    GROUP BY submit_time
                    ORDER BY submit_time DESC', ARRAY_A);

foreach($results as $result){
    echo $result->Name;
}

Lien

1
saphus

Vous avez un problème avec votre requête qui vous empêche d'utiliser GROUP BY et ORDER BY avant WHERE

remplacer

FROM tablename GROUP BY submit_time ORDER BY submit_time DESC

avec

FROM tablename

Ceci est votre requête

$results = $wpdb->get_results( 'SELECT DATE_FORMAT(FROM_UNIXTIME(submit_time), "%b %e, %Y  %l:%i %p") AS Submitted,
            MAX(IF(field_name="Name", field_value, NULL )) AS "Name",
            MAX(IF(field_name="Email", field_value, NULL )) AS "Email",
            MAX(IF(field_name="Subject", field_value, NULL )) AS "Position",
            MAX(IF(field_name="Message", field_value, NULL )) AS "Message"
            FROM tablename
            WHERE
            form_name = "Resume"
            GROUP BY submit_time
            ORDER BY submit_time DESC', ARRAY_A);
2
Ahed Eid

Va prendre un coup de poignard sauvage, mais ARRAY_A retournera un tableau associatif

Vous essayez ensuite d'accéder à ce tableau associatif en tant qu'objet

Changement simple:

foreach($results as $result){
    echo $result->Name;
}

À:

foreach($results as $result){
    echo $result['Name'];
}

et l'erreur devrait disparaître!

2
Jamie

$wpdb->get_results renvoie un tableau multidimensionnel. Donc, l'argument pour le foreach devrait être:

foreach($results as $object=>$result){
    echo $result->Name;
}

Var_dump toujours vos objets et tableaux avant d'y accéder.

0
Swopnil Dangol