Ich habe eine Funktion geschrieben, die die Anzahl der in einer SELECT-Abfrage gefundenen Zeilen zurückgeben soll, aber immer entweder 0 oder ein Array zurückzugeben scheint. Ich habe jetzt ungefähr eine Stunde damit rumgespielt und kann es immer noch nicht herausfinden! Ich bin sicher, ich mache etwas dumm falsch.
Die MySQL-Tabelle
+--------+-------------+---------------------+
| postid | ip | time |
+--------+-------------+---------------------+
| 1234 | 192.168.0.1 | 2014-01-29 14:27:02 |
| 5678 | 192.168.0.2 | 2014-01-29 14:27:02 |
+--------+-------------+---------------------+
PHP
### Search for IP in database
function postviews_get_ip($id, $ip) {
global $post, $wpdb;
$wpdb->get_results("SELECT * FROM $wpdb->wp_postviews_ips WHERE postid = $id AND ip = $ip");
$rowcount = $wpdb->num_rows;
return $rowcount;
}
postviews_get_ip($id, $_SERVER['REMOTE_ADDR']);
//both $id and $_SERVER['REMOTE_ADDR']) return the values I'm searching for in the database
Antworten:
Wenn Sie nur versuchen, eine Zählung zu erhalten, ist
$wpdb->get_var();
die VerwendungCOUNT()
in Ihrem SQL besser:Was in Ihrem vorherigen Beispiel schief gelaufen ist, Sie haben Ihre
$wpdb->get_results()
Instanz keiner Variablen$wpdb->num_rows;
zugewiesen , und ohne sie wird nur Null zurückgegeben, da sie nicht tatsächlich aus der Instanz der Abfrage gezogen wird, sondern aus dem globalen $ wbdb Objekt.Wenn Sie verwenden möchten
get_results()
:Aber ich würde die Notwendigkeit dafür nicht sehen, wenn Sie nicht die Ergebnisse benötigen. In diesem Fall würde ich das
$ipquery
Objekt einfach zurückgeben und es verwendennum_rows
, wenn ich es benötige:quelle
Die Abfrage scheint falsch zu sein.
$ip
ist Zeichenfolge, daher sollten Sie dies wie unten in einfache Anführungszeichen setzenquelle