【发布时间】:2021-08-12 22:47:48
【问题描述】:
我有登录部分的密码,使用$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);
谢谢
【问题讨论】:
-
请显示查询数据库并将密码哈希分配给变量的完整代码 - 在上面的
$hash = mysqli_query($mysqli, $sql_e2);变量 $hash 将是一个布尔值 - 你需要fetch结果在分配变量之前 -
通过在 sql cmd 中直接使用
$email,您的代码似乎容易受到 sql 注入的影响 - 在使用用户提供的数据时使用prepared statements -
函数 mysqli_query() 没有返回您期望的值。成功时返回 mysqli_result 对象,失败时返回 false。所以,首先你必须检查它是否返回 false,然后处理 mysqli_result 对象(成功时),获取行(你可以使用 mysqli_fetch_row)。