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?
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
13642700cookie-checkWarum ist die Antwort von WordPress $wpdb->query() 1, wenn die zurückgegebenen Zeilen 0 sindyes