2016-06-15 3 views
0

У меня есть запрос, который выполняется нормально, но проблема как-то сводит его к предупреждению, когда данные не соответствуют базе данных.mysql_num_rows дает waring, когда данные не найдены в базе данных

$count = mysql_num_rows($qry); //warning here 

я могу использовать @, чтобы скрыть ошибку, но это не хорошо программирования, насколько я знаю, так как я могу скрыть предупреждение от выхода?

Предупреждение: Предупреждение: mysql_num_rows() ожидает параметр 1, чтобы быть ресурс, булево приведены в [somepage.php] на линии [11]

$count = @mysql_num_rows($qry); //No warning 

Так я знаю, будут способы скрыть предупреждение, но я не знаю. Пожалуйста помоги мне с этим.

+1

error_reporting (~ E_WARNING); –

+0

Что это делает? –

+0

Скрыть свое предупреждение с текущей страницы в браузере. –

ответ

2

Некоторые люди говорят, что вы должны обойти эту проблему, подавляя предупреждения. Не слушайте их - предупреждения говорят вам, что что-то не так. Подавление их поражает всю их цель.

Я также предполагаю, что вы знаете, что функции mysql_ устарели в пользу mysqli. Другие упомянули об этом, и они абсолютно правы - есть ряд проблем безопасности с расширением mysql. Это так плохо, что если вы хотите перейти на PHP 7, вы будете вынуждены использовать mysqli, потому что mysql был удален.

В общем случае, когда что-то возвращает ресурс при успешном завершении и false при сбое, вы можете проверить наличие сбоя перед использованием ресурса. Как так:

$rslt = mysql_query($query); 
if (!$rslt) 
{ 
    // handle error 
} 
else 
{ 
    $count = mysql_num_rows($rslt); 
    // ... 
} 

В качестве альтернативы проверки результата как логическое значение, вы можете поменять местами случаи и использовать is_resource.

+0

Спасибо за ваше предложение. –

+0

Лучше не использовать mysql_ * вообще –

Смежные вопросы