Napisałem funkcję, która ma zwrócić liczbę wierszy znalezionych w zapytaniu SELECT, ale zawsze albo zwraca 0, albo tablicę. Grzebię w tym od około godziny i wciąż nie mogę tego rozgryźć! Jestem pewien, że robię coś głupio złego.
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
Odpowiedzi:
Jeśli tylko próbujesz uzyskać liczbę,
$wpdb->get_var();
wraz z użyciemCOUNT()
w sql będzie lepiej:Jeśli chodzi o to, co poszło źle w poprzednim przykładzie, nie przypisałeś swojej
$wpdb->get_results()
instancji do zmiennej, a bez niej$wpdb->num_rows;
po prostu zwróci zero, ponieważ tak naprawdę nie pobiera ona z instancji zapytania, a raczej globalny $ wbdb obiekt.Jeśli chcesz użyć
get_results()
:Ale nie widziałbym takiej potrzeby, chyba że potrzebowałbyś wyników, w którym to przypadku po prostu zwróciłbym
$ipquery
obiekt i używałbymnum_rows
go, gdy go potrzebowałem:źródło
Wygląda na to, że zapytanie jest nieprawidłowe.
$ip
jest ciągiem, więc powinieneś umieścić pojedynczy cudzysłów, jak poniżejźródło