首页 > 解决方案 > 从 MYSQL 数据库检索后,PHP 中的哈希密码不是字符串

问题描述

我有登录部分的密码,它使用$hash = password_hash($password, PASSWORD_DEFAULT);

密码作为哈希值存储在数据库中,$2y$10$CaQON5WOEHcla58aBoIRKOmyYLBwtDHKFqk81y25.EGvjBqlF0W1W

我在登录页面上查询数据库并检查用户电子邮件是否在数据库中,确实如此。

如果我使用的查询有效,我已经检查了 MySQL 工作台,并且它返回密码正常。

但是,当我尝试在数据库中查询密码并将其分配给变量时,在回显该变量不是字符串时出现错误。

但是我试过$verify = password_verify($password, $hash);了,我也得到的错误是参数 2 必须是一个字符串。

那么为什么我得到它之后的值不是字符串呢?以及如何检索正确的值?

这是我的查询:

   $sql_e2 = "SELECT password FROM users WHERE email='$email'";
   $hash = mysqli_query($mysqli, $sql_e2);

谢谢

标签: phpmysqlhashpasswords

解决方案


我完成了将现在工作的内容放在一起,并针对工作和非工作帐户进行了测试。

//query SQL for password
        $sql_e2 = $mysqli->prepare("SELECT password FROM users WHERE email = ?");
        $sql_e2->bind_param("s", $email);
        $sql_e2->execute();
        $result = $sql_e2->get_result();

        //fetch row from result and assign value
        $row = mysqli_fetch_row($result);
        $hash = $row[0] ?? false;

        // Print the result depending if they match
        if (password_verify($password, $hash)) {
            echo 'Password Verified!';
        } else {
            echo 'Incorrect Password!';
        }

谢谢各位指点。


推荐阅读