данный код: PHP: <?php $host='localhost'; $database='host1773545_db'; $user='***'; $pswd='***'; $dbh=mysqli_connect($host, $user, $pswd) or die("Не могу соединиться с MySQL."); mysqli_select_db($dbh, $database) or die("Не могу подключиться к базе."); $login = '***'; $pass = "12345"; $sql = mysqli_query($dbh, "Select id from users where login = '$login' and pass = md5('$pass')"); if (mysqli_num_rows($sql) > 0) { die("Авторизация прошла успешно"); } else { print "Ошибка авторизации"; } ?> выводит такой результат: Предупреждение : mysqli_num_rows () ожидает, что параметр 1 будет mysqli_result, логическое значение указано в /home/host1773545/host1773545.hostland.pro/htdocs/www/admin/index.php в строке 13 Ошибка авторизации
дай угадаю в $sql у тебя false, так как пользователь не найден. Можешь переписать условие так, тогда предупреждения быть не должно. PHP: if ($sql && mysqli_num_rows($sql) > 0) { die("Авторизация прошла успешно"); } else { print "Ошибка авторизации"; } Но это предупреждение не серьезная ошибка. Принципиально не влияет на твой скрипт. Зачем здесь md5('$pass') ты пишешь $pass в кавычках? Ты зашифровываешь слово '$pass' в md5, а ты наверно хотел значение переменной $pass зашифровать?
Если пользователь не найден, возвращается не false, а объект mysqli_result с пустой результирующей выборкой. false возвращается в случае ошибки выполнения запроса.
ну да. у него в предупреждении указано boolean given, это меня с толку сбило. Хотя, думаю там именно ошибка синтаксиса mysql и false в переменной $sql
@yanuzay, зачем думать, когда об этом написано в сообщении об ошибке? @Владислав Глебов, суть в том, что вы не проверяете результат выполнения запроса. Ошибка может возникать во время выполнения, даже когда все остальное написано правильно. Хотя у вас еще потенциальные SQL-инъекции наблюдаются, из-за кот. может быть поврежден текст запроса.