Cómo devolver el número de filas encontradas de la consulta SELECT

8

Escribí una función que se supone que devuelve el número de filas encontradas en una consulta SELECT, pero siempre parece devolver 0 o una matriz. ¡He estado jugando con esto por alrededor de una hora y todavía no puedo entenderlo! Estoy seguro de que estoy haciendo algo estúpidamente mal.

La tabla de MySQL

+--------+-------------+---------------------+
| 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
    
pregunta Swen 29.01.2014 - 16:32

2 respuestas

19

Si simplemente estás tratando de obtener un recuento, $wpdb->get_var(); junto con el uso de COUNT() en tu sql será mejor:

### 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

En cuanto a lo que salió mal en su ejemplo anterior, no estaba asignando su instancia $wpdb->get_results() a una variable, y sin ella $wpdb->num_rows; solo devolverá cero ya que no está realmente tirando de la instancia de la consulta, sino el objeto global $ wbdb.

Si desea utilizar get_results() :

### 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

Pero no vería la necesidad de eso a menos que necesitara los resultados, en cuyo caso simplemente devolvería el objeto $ipquery y usaría num_rows cuando lo necesitara:

### 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;
    
respondido por el eteich 29.01.2014 - 20:12
1

Parece que la consulta es incorrecta. $ip es una cadena, por lo que debe colocar comillas simples alrededor de eso como se muestra a continuación

$wpdb->get_results("SELECT * FROM {$wpdb->prefix}postviews_ips WHERE postid = $id AND ip = '$ip'");
    
respondido por el Chittaranjan 29.01.2014 - 17:07

Lea otras preguntas en las etiquetas