В пользовательской функции я делаю следующее:

    $exists = $wpdb->query($wpdb->prepare('
    SELECT COUNT(*)
    FROM wp_%d_gdsr_data_article
    WHERE post_id = %d

', $blog_id, $post_id));

$ exists оценивается как 1, даже если запрос не возвращает ни одной строки. Кроме того, var_dump ($ wpdb-> query) возвращает NULL. Кто-нибудь знает, что здесь происходит?

Благодарность,

5
codecowboy 7 Июн 2010 в 17:20

2 ответа

Лучший ответ

Из документации:

Функция возвращает целое число, соответствующее количеству затронутых / выбранных строк. Если есть ошибка MySQL, функция вернет ЛОЖЬ. (Примечание: поскольку могут быть возвращены как 0, так и FALSE, убедитесь, что вы используете правильный оператор сравнения: равенство == vs. идентичность ===).

Запрос возвращает 1 строку, поэтому функция query() возвращает 1 - и всегда будет возвращать 1 для запроса, который вы публикуете в своем вопросе, даже если количество строк, выбранных параметром COUNT равно 0. Используйте get_var, get_row или get_results, как предлагает TheDeadMedic, чтобы получить фактический результат запроса, который может быть 0, 1, 2 и т. Д.

9
thetaiko 7 Июн 2010 в 18:02

Вместо этого используйте $wpdb->get_var($query).

Соответственно, используйте $wpdb->get_row() для получения одной строки как одного объекта (или массива) и $wpdb->get_results() для получения набора результатов.

6
TheDeadMedic 7 Июн 2010 в 17:24
Спасибо, но почему он должен возвращать 1, если должен возвращать количество строк? Также есть идеи, почему запросы $ wpdb-> пустые?
 – 
codecowboy
7 Июн 2010 в 17:35
2
$wpdb->query() следует использовать только для исполняемых запросов, так как он возвращает только количество строк или false, если строк нет. $wpdb->queries используется только в том случае, если вы определяете SAVEQUERIES как истинное.
 – 
TheDeadMedic
7 Июн 2010 в 17:51