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 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
Respuestas:
Si simplemente está tratando de obtener un recuento,
$wpdb->get_var();
junto con el usoCOUNT()
en su sql será mejor:En cuanto a lo que salió mal en su ejemplo anterior, no estaba asignando su
$wpdb->get_results()
instancia a una variable, y sin ella$wpdb->num_rows;
solo devolverá cero, ya que en realidad no se extrae de la instancia de la consulta, sino más bien el $ wbdb global objeto.Si quieres usar
get_results()
:Pero no vería la necesidad de eso a menos que necesite los resultados, en cuyo caso simplemente devolvería el
$ipquery
objeto y lo usaríanum_rows
cuando lo necesitara:fuente
Parece que la consulta es incorrecta.
$ip
es una cadena, por lo que debe poner una comilla simple alrededor de eso como a continuaciónfuente