Не работает авторизация PHP PDO
Суть в том, что есть БД, форма для авторизации, отсылающая к следующему скрипту. Никаким образом собственно эта авторизация не работает, однако вставив несколько var_dump() и count() я понял, что после перевода объекта в массив массив пустой, отсюда получается, что count() возвращает 0. Однако я изменил fetchAll() на fetch(PDO::FETCH_ASSOC) и увидел, что второй var_dump() возвращает булевый false! Далее count() возвращает 1 и при любые значениях формы авторизация как будто проходит.
<?php
require_once('db_connection.php');
if ($_POST['login'] == '' || $_POST['password'] == '')
header("Location: /authorization.php");
else {
$sql = "SELECT * FROM users WHERE login = :login AND password = :pass"; //Формируем запрос без данных
$result = $pdo->prepare($sql);
$result->bindvalue(':login', $_POST['login']); //Заполняем данные
$result->bindvalue(':pass', md5(md5($_POST['password']))); //Заполняем данные. Знаю, что хэшировать пароли в md5 идея не очень, но этот проект тестовый.
$result->execute( ); //Выполняем запросы
var_dump($result);
$result = $result->fetchAll(); //переводим обьект ПДО в массив данных, для удобной работы
var_dump($result);
if (count($result)>0) { //Если база вернула 1 значение, значит и логин и пароль совпали. отлично
echo '<meta charset="UTF-8">Ура! Мы авторизировались!';
$_SESSION['user'] = $result[0]; //сохраняем обьект пользователя в сессии
} else echo '<meta charset="UTF-8">Логин или пароль не верный или пользователь не существует';
echo count($result);
}
?>
Ответы (1 шт):
Автор решения: Stepan Berkunov
→ Ссылка
Смысл был в том, что скрипт регистрации записывал пароль без md5(md5()). В связи с этим сравнение введённого пароля с паролем из базы данных возвращало 0