WordPress – get_results() – Woher weiß ich, ob es fehlgeschlagen oder leer ist?

Lesezeit: 3 Minuten

Ich verwende die WordPress-Funktion $wpdb->get_results()

https://codex.wordpress.org/Class_Reference/wpdb#SELECT_Generic_Results

Es sagt:

“Wenn keine übereinstimmenden Zeilen gefunden werden oder wenn ein Datenbankfehler vorliegt, ist der Rückgabewert ein leeres Array.”

Wie kann ich dann wissen, ob die Abfrage fehlgeschlagen ist ODER ob sie leer ist?

Benutzeravatar von Sagar Devkota
Sagar Devkota

Verwenden

$results=$wpdb->get_results($yoursql);
if (count($results)> 0){
    //do here

}

Aber wenn Sie wissen möchten, ob die Abfrage fehlgeschlagen ist

$wpdb -> show_errors ();
$wpdb -> get_results ($wpdb -> prepare($sql));
$wpdb -> print_error ();

  • Dann bekomme ich den letzten Fehler, nicht ob die letzte Abfrage einen Fehler hat oder nicht. Der letzte Fehler könnte vor 10 Abfragen aufgetreten sein.

    – Jens Törnell

    26. März 2015 um 11:40 Uhr

Etwas spät zur Party hier, aber ich suche nur das Gleiche. Ich habe mal durch die gestöbert wp-db.php Code auf Version 4.4.2.

In Zeile 1422, innerhalb der Methode flush() Es gibt ein bisschen Code, der das zurücksetzt last_error Eigentum:

$this->last_error="";

Dies flush() Methode wird in der aufgerufen query() Methode in Zeile 1693:

$this->flush();

Das get_results() Methodenaufrufe query() auf Zeile 2322:

if ( $query ) {
    $this->query( $query );
} else {
    return null;
}

Damit können wir ziemlich sicher sein, dass mehr oder weniger jedes Mal get_results() (Oder get_row() übrigens auch) heißt, query() und flush() werden beide genannt, was dafür sorgt last_error wird auf die leere Zeichenfolge gesetzt, bevor die Abfrage ausgeführt wird.

Angenommen, die Abfrage wird ausgeführt (Wenn dies nicht der Fall ist, null zurückgegeben wird – wenn die Abfrage beispielsweise leer ist), last_error sollte eine Fehlermeldung enthalten, wenn die Abfrage aus irgendeinem Grund fehlschlägt.

Seit last_error ist flush()ed/reset jedes Mal, sollte es nur einen Fehler für die zuletzt ausgeführte Abfrage enthalten und nicht den letzten Fehler für eine zuvor ausgeführte Abfrage. In diesem Sinne sollte man sich sicher darauf verlassen können last_error um festzustellen, ob bei der Abfrage etwas schief gelaufen ist.

$results = $wpdb->get_results($sql);
if (is_null($results) || !empty($wpdb->last_error)) {
    // Query was empty or a database error occurred
} else {
    // Query succeeded. $results could be an empty array here
}

Meiner Meinung nach nicht die intuitivste, aber es scheint ausreichend zu sein.

Persönlich habe ich meine eigene Klasse herum geschrieben wpdb zu meinem eigenen Vorteil. Das ist mein getResults() Methode.

public function getResults($query, $bindings = [])
{
    // Prepare the statement (My prepare method inspects $query and just returns it if there's no bindings, otherwise it uses $wpdb->prepare()        
    $prepared = $this->prepare($query, $bindings);

    // Execute the statement
    $rows = $this->db->get_results($prepared, ARRAY_A);

    // If an array was returned and no errors occurred, return the result set
    if (is_array($rows) && empty($this->db->last_error)) {
        return $rows;
    }

    // On failure, return false
    return false;
}

Hoffe das hilft.

Die Wpdb->get_results-Funktion von WordPress gibt das Ergebnis zurück, wenn sie erfolgreich ist, andernfalls wird sie null zurückgeben. Es kann viele Gründe geben, wenn eine Abfrage fehlschlägt. Lesen Sie den ausführlichen Artikel zum Debuggen der Rückgabe von get_results() leere Ergebnisse hier

Obwohl Sie Funktionen wie verwenden können wpdb->show_error() um zu überprüfen, was der letzte Fehler nach der Ausführung der SQL-Abfrage war. Manchmal gibt dieser Fehler leer zurück, dann versuchen Sie es zu verwenden wpdb->last_query um die endgültige Abfrage zu überprüfen, die gebildet wird.

1395240cookie-checkWordPress – get_results() – Woher weiß ich, ob es fehlgeschlagen oder leer ist?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy