php - 从 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);
谢谢
解决方案
我完成了将现在工作的内容放在一起,并针对工作和非工作帐户进行了测试。
//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!';
}
谢谢各位指点。
推荐阅读
- etcd - 错误“远程错误:tls:错误证书”,ServerName“”
- .net-core - 在 dotnet core 中配置 Azure AD 重定向
- html - 在 Jupyter 中使用 css 并排调整不同尺寸的图像
- java - Mongodb从特定月份获取记录
- git - 无法在 git 中打开最近推送的文件夹
- apache-camel - 骆驼中cxf out拦截器后的处理
- python - 如何将变量资源管理器中的值用作 Python 中的数据框?
- r - 闪亮的文档 (HTML) 扫描仪错误:在此上下文中不允许映射值
- node.js - 如何在 Dialogflow 机器人中添加日期选择器!用户必须在 nodejs 中使用 javascript datepicker 来选择日期
- excel - 计算连续的单元格值并在单元格值更改时重置计数