web-dev-qa-db-ger.com

Wie holt man ein Array in $ wpdb?

Ich habe ein Snippet, das Daten aus der Datenbanktabelle auswählt. Aber ich stoße auf einen Fehler: Warning: Invalid argument supplied for foreach()

Ich stoße auf einen neuen Fehler: Notice: Trying to get property of non-objectin dieser Zeile echo $result->Name;

Snippet (aktualisiert):

$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;
}

Verknüpfung

1
saphus

Sie haben ein Problem mit Ihrer Abfrage: Sie können GROUP BY und ORDER BY nicht vor WHERE verwenden.

ersetzen

FROM tablename GROUP BY submit_time ORDER BY submit_time DESC

mit

FROM tablename

Dies ist Ihre Anfrage

$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

Ich werde einen wilden Stich machen, aber ARRAY_A gibt ein assoziatives Array zurück

Sie versuchen dann, auf dieses assoziative Array als Objekt zuzugreifen

Einfache Änderung:

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

Zu:

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

und der fehler sollte verschwinden!

2
Jamie

$wpdb->get_results gibt ein mehrdimensionales Array zurück. Das Argument für den foreach sollte also sein:

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

Sichern Sie Ihre Objekte und Arrays immer mit var_dump, bevor Sie darauf zugreifen.

0
Swopnil Dangol