Я написал функцию, которая должна возвращать количество строк, найденных в запросе SELECT, но она всегда либо возвращает 0, либо массив. Я уже около часа возился с этим и до сих пор не могу понять! Я уверен, что я делаю что-то глупо неправильно.
MySQL Table
+--------+-------------+---------------------+
| 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
Ответы:
Если вы просто пытаетесь получить счет, лучше
$wpdb->get_var();
использоватьCOUNT()
в вашем sql:Что касается того, что пошло не так в вашем предыдущем примере, вы не присваивали свой
$wpdb->get_results()
экземпляр переменной, а без него$wpdb->num_rows;
просто возвращали бы ноль, так как на самом деле это не извлечение из экземпляра запроса, а глобальный $ wbdb объект.Если вы хотите использовать
get_results()
:Но я бы не увидел в этом необходимости, если бы вам не понадобились результаты, и в этом случае я бы просто возвратил
$ipquery
объект и использовалnum_rows
его, когда мне это нужно:источник
Кажется, запрос неправильный.
$ip
является строкой, поэтому вы должны поставить одинарную кавычку, как показано нижеисточник