PDO PHP的登录详细信息无效

PDO PHP的登录详细信息无效,php,pdo,Php,Pdo,在得到关于正确散列密码的建议后,我正在努力让用户登录 这是我的登录功能 public function Login($email, $password) { $db = DB(); $stat = $db->prepare("SELECT user_id FROM users WHERE email=:email AND password=:password"); $stat->bindParam("em

在得到关于正确散列密码的建议后,我正在努力让用户登录

这是我的登录功能

 public function Login($email, $password)
{
        $db = DB();
        $stat = $db->prepare("SELECT user_id FROM users WHERE email=:email AND password=:password");
        $stat->bindParam("email", $email, PDO::PARAM_STR);
        $hashed_password = password_hash($password, PASSWORD_DEFAULT);
        $stat->bindParam("password", $hashed_password, PDO::PARAM_STR);
        $stat->execute();
        if ($stat->rowCount() > 0) {
            $result = $stat->fetch(PDO::FETCH_OBJ);
            return $result->user_id;
        } else {
            return false;
} }

这是我在索引页面上的登录脚本

if (!empty($_POST['btnLogin'])) {

$email = ($_POST['email']);
$password = ($_POST['password']);
if ($email == "") {
    $login_error_message = 'Email field is required!';
} else if ($password == "") {
    $login_error_message = 'Password field is required!';
} else {
    $user_id = $app->Login($email, $password); 
    if($user_id > 0)
    {
        $_SESSION['user_id'] = $user_id;
        header("Location: frontpage.php");
    }
    else
    {
        $login_error_message = 'Invalid login details!';
    }
}
}

我得到的只是无效的登录详细信息

有人能告诉我哪里出了问题吗

像往常一样,提前感谢您提供的密码提示。哈希仅在存储新密码时使用。您需要验证密码

不要像这样将密码放入where子句:

$stat = $db->prepare("SELECT user_id FROM users WHERE email=:email AND password=:password");
相反,请仅基于唯一用户id选择用户和哈希密码字符串:

$stat = $db->prepare("SELECT user_id,password FROM users WHERE email=:email");
然后从该记录中取出已经散列的密码,并将其用作第二个参数:

if (password_verify($passwordTheyTyped, $passwordFromTheDatabase)) {
    // success
} else {
    // fail
}

选择仅限用户的位置,使用密码进行密码比较/验证\u验证结果不在选择中,密码\u散列有盐渍,结果散列总是不同。好的,谢谢,回答的第二部分if语句,这是进入我的函数还是进入索引页我将把它放入函数中。