Почему сообщение об ошибке не появляется?

#php

#php

Вопрос:

Я создал функцию поиска для своего блога. Источник моего представления —

 <?php
if (!empty($query)):
    foreach ($query as $item):
        echo '<h2><a href="/article/' . $item['slug'] . '">' . $item['virsraksts'] . '</a></h2>';
        echo '<p>' . nl2br($item['saturs']) . '</p>';
    endforeach;
else:
    echo 'Nothing found!';
endif;
?>
  

Когда я отправляю неправильный поисковый запрос, скрипт хочет показать сообщение об ошибке «Ничего не найдено!», но это сообщение не появляется. Почему сообщение об ошибке не появляется?

Комментарии:

1. Потому что $query не является пустым. Так же, как вы это заявили.

2. Кто-то все еще использует альтернативный синтаксис PHP, это удивительно. Но по теме: невозможно ответить на ваш вопрос, если мы не знаем, что находится в вашей переменной $query. Попробуйте поместить print_r($query); перед оператором «if», чтобы проверить, каково его фактическое значение. Как при наличии результатов, так и при их отсутствии

3. @Ivan Я предполагаю, что это часть представления, но обычно вы выскакиваете из тегов PHP

4. @gawpertron именно то, о чем я думал…

Ответ №1:

потому что, как уже заявляли другие, if (!empty($query)): не проверяет результат запроса. Он проверяет, является ли переменная $query пустой или нет.

Я думаю, что вы хотите сделать что-то вроде этого:

 if (mysql_num_rows($query) > 0) {
   // do something here
}
  

где $query возвращаемый результат mysql_query() вызова php.

http://php.net/manual/en/function.mysql-num-rows.php

Комментарии:

1. Он показывает ошибку — ErrorException [Предупреждение]: mysql_num_rows() ожидает, что параметр 1 будет ресурсом, заданным объектом

2. Есть идеи? Этот вариант не работает, ошибка находится в одном сообщении сверху.

Ответ №2:

используйте var_dump($query) перед оператором «IF», чтобы проверить, есть ли что-то в массиве $query

Комментарии:

1. Когда я набираю, например, ‘word’ и var_dump показывает — object(Database_MySQL_Result)#23 (7) { ["_internal_row":protected]=> int(0) ["_query":protected]=> string(99) "SELECT * FROM ieraksti WHERE virsraksts like '%word%' OR slug like '%word%' OR saturs like '%word%'" ["_result":protected]=> resource(67) of type (mysql result) ["_total_rows":protected]=> int(0) ["_current_row":protected]=> int(0) ["_as_object":protected]=> bool(false) ["_object_params":protected]=> NULL }

2. может быть, вам следует подсчитать количество строк в результате, а не проверять, что объект пуст