Eu escrevi uma função que deveria retornar o número de linhas encontradas em uma consulta SELECT, mas ela sempre parece retornar 0 ou uma matriz. Estou brincando com isso há cerca de uma hora e ainda não consigo descobrir! Tenho certeza de que estou fazendo algo estupidamente errado.
A tabela 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
Respostas:
Se você está apenas tentando obter uma contagem, o
$wpdb->get_var();
usoCOUNT()
do sql será melhor:Quanto ao que deu errado no exemplo anterior, você não estava atribuindo sua
$wpdb->get_results()
instância a uma variável e, sem ela,$wpdb->num_rows;
retornará zero, pois na verdade não é extraído da instância da consulta, mas sim o $ wbdb global objeto.Se você deseja usar
get_results()
:Mas eu não veria a necessidade disso, a menos que você precisasse dos resultados; nesse caso, eu retornaria o
$ipquery
objeto e o usarianum_rows
quando necessário:fonte
Parece que a consulta está errada.
$ip
é string, então você deve colocar aspas simples em torno disso, como abaixofonte