it-swarm.com.de

Gibt die Anzahl der gefundenen Zeilen aus der SELECT-Abfrage zurück

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ückgibt. Ich habe jetzt ungefähr eine Stunde damit rumgespielt und ich kann es immer noch nicht herausfinden! Ich bin mir sicher, dass ich etwas Dummes falsch mache.

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
8
Swen

Wenn Sie lediglich versuchen, eine Zählung zu erhalten, ist $wpdb->get_var(); zusammen mit der Verwendung von COUNT() in Ihrer SQL besser:

### Search for IP in database
function postviews_get_ip($id, $ip) {
    global $post, $wpdb;

    $rowcount = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->wp_postviews_ips WHERE postid = $id AND ip = '$ip'");

    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

Was in Ihrem vorherigen Beispiel schief gelaufen ist, haben Sie Ihre $wpdb->get_results() -Instanz keiner Variablen zugewiesen, und ohne sie wird $wpdb->num_rows; nur Null zurückgeben, da sie nicht aus der Instanz der Abfrage, sondern aus der globalen gezogen wird $ wbdb Objekt.

Wenn Sie get_results() verwenden möchten:

### Search for IP in database
function postviews_get_ip($id, $ip) {
    global $post, $wpdb;

    $ipquery= $wpdb->get_results("SELECT * FROM $wpdb->wp_postviews_ips WHERE postid = $id AND ip = '$ip'");
    $rowcount = $ipquery->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

Aber ich würde die Notwendigkeit dafür nicht sehen, wenn Sie nicht die Ergebnisse benötigen. In diesem Fall würde ich einfach das $ipquery-Objekt zurückgeben und num_rows darauf verwenden, wenn ich es benötige:

### Search for IP in database
function postviews_get_ip($id, $ip) {
    global $post, $wpdb;

    $ipquery = $wpdb->get_results("SELECT * FROM $wpdb->wp_postviews_ips WHERE postid = $id AND ip = '$ip'");
    return $ipquery;
}

$someVariable = postviews_get_ip($id, $_SERVER['REMOTE_ADDR']);
//both $id and $_SERVER['REMOTE_ADDR']) return the values I'm searching for in the database

echo $someVariable->num_rows;
21
eteich

Scheint, die Abfrage ist falsch. $ip ist ein String, daher sollten Sie diesen wie folgt in einfache Anführungszeichen setzen

$wpdb->get_results("SELECT * FROM {$wpdb->prefix}postviews_ips WHERE postid = $id AND ip = '$ip'");
1
Chittaranjan