#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.
Комментарии:
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. может быть, вам следует подсчитать количество строк в результате, а не проверять, что объект пуст