Warum ist die Antwort von WordPress $wpdb->query() 1, wenn die zurückgegebenen Zeilen 0 sind

Lesezeit: 1 Minute

Ich mache folgendes in einer benutzerdefinierten Funktion:

    $exists = $wpdb->query($wpdb->prepare('
    SELECT COUNT(*)
    FROM wp_%d_gdsr_data_article
    WHERE post_id = %d

', $blog_id, $post_id));

$exists wird zu 1 ausgewertet, auch wenn von der Abfrage keine Zeilen zurückgegeben werden. Außerdem liefert var_dump($wpdb->queries) eine NULL. Weiß jemand was hier los ist?

Danke,

Benutzer-Avatar
thetaiko

Von dem Dokumentation:

Die Funktion gibt eine ganze Zahl zurück, die der Anzahl der betroffenen/ausgewählten Zeilen entspricht. Bei einem MySQL-Fehler gibt die Funktion FALSE zurück. (Hinweis: Da sowohl 0 als auch FALSE zurückgegeben werden können, stellen Sie sicher, dass Sie den richtigen Vergleichsoperator verwenden: Gleichheit == vs. Identität ===).

Die Abfrage gibt also 1 Zeile zurück query() Funktion zurück 1 – und wird immer wiederkommen 1 für die Abfrage, die Sie in Ihrer Frage posten, auch wenn die Anzahl der ausgewählten Zeilen durch die COUNT ist 0. Verwenden get_var, get_rowoder get_results wie von TheDeadMedic vorgeschlagen, um das tatsächliche Ergebnis der Abfrage zu erhalten, das sein könnte 0, 1, 2etc.

Verwenden $wpdb->get_var($query) stattdessen.

Dementsprechend verwenden $wpdb->get_row() um eine einzelne Zeile als einzelnes Objekt (oder Array) abzurufen, und $wpdb->get_results() um eine Ergebnismenge zu erhalten.

  • Danke, aber warum sollte es 1 zurückgeben, wenn es eine Zeilenanzahl zurückgeben soll? Haben Sie auch eine Idee, warum $wpdb->queries leer ist?

    – Codecowboy

    7. Juni 2010 um 13:35 Uhr


  • $wpdb->query() sollte nur für ausführbare Abfragen verwendet werden, da es nur die Anzahl der Zeilen oder false zurückgibt, wenn keine Zeilen vorhanden sind. $wpdb->queries wird nur verwendet, wenn Sie definieren SAVEQUERIES als wahr.

    – Der tote Sanitäter

    7. Juni 2010 um 13:51 Uhr

1364270cookie-checkWarum ist die Antwort von WordPress $wpdb->query() 1, wenn die zurückgegebenen Zeilen 0 sind

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

Privacy policy