Q:

PDO сверка пользователя с hash_password

в бд залиты пользователи с hash_password, при извлечении не пойму как сделать, чтобы пароль нормально проверялся. с PDO работаю первый день, камнями не кидаться =)
Вот мой кривокод:
    <?php
    require_once "libs/db.php";

    $data = $_POST;
    if(isset($data['do_login']))
    {
        $errors = array();
        $query = ('SELECT EXISTS (SELECT 1 FROM users WHERE u_login = :login)');
        $stmt = $pdo->prepare($query);
        $stmt->execute(['login' => $data['login']]);
        $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
        if (password_verify($data['password'], $results['u_password'])) {
            echo "LOGGED IN";
        } else {
            echo "LOGGIN FAILED";
        }
    }

?>
<form action="login.php" method="POST">
    <p>Ваш логин: <input type="text" name="login" value="<?= @$data['login']; ?>"></p>
    <p>Ваш Пароль: <input type="password" name="password" value="<?= @$data['password']; ?>"></p>
    <p><button type="submit" name="do_login">Войти</button></p>

</form>

Ошибка
Notice: Undefined index: u_password in C:\MAMP\htdocs\project1\login.php on line 12
LOGGIN FAILED
Подскажите где я тут накосячил, и как лучше это сделать можно было вообще.

A:

Ошибка в запросе, вы проверяете наличие пользователя с определённым логином, а не загружаете данные этого пользователя. Нужно SELECT * FROM users WHERE u_login = :login.
fetchAll возвращает массив массивов (всю таблицу а не отдельную запись), Для того чтоб получить только 1 запись нужно делать fetch.
if(isset($data['do_login']))
{ 
    $errors = [];
    $query = 'SELECT * FROM users WHERE u_login = :login';
    $stmt = $pdo->prepare($query);
    $stmt->execute(['login' => $data['login']]);
    $results = $stmt->fetch(PDO::FETCH_ASSOC);

    if ($result && password_verify($data['password'], $results['u_password'])) 
    {
        echo "LOGGED IN";
    }
    else 
    {
        echo "LOGGIN FAILED";
    }
}`

