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

Pregunta:

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 durante aproximadamente una hora y todavía no puedo resolverlo! Estoy seguro de que estoy haciendo algo estúpidamente mal.

La tabla 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

Respuesta:

Si simplemente está intentando obtener un recuento, $wpdb->get_var(); junto con el uso de COUNT() en su 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 $wpdb->get_results() a una variable, y sin ella $wpdb->num_rows; simplemente devolverá cero, ya que en realidad no se extrae de la instancia de la consulta, sino del 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 en él 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;

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım