从MYSQL数据库检索后,PHP中的哈希密码不是字符串
我有登录部分的密码,它使用从MYSQL数据库检索后,PHP中的哈希密码不是字符串,php,mysql,hash,passwords,Php,Mysql,Hash,Passwords,我有登录部分的密码,它使用$hash=password\u hash($password,password\u DEFAULT) 密码以散列形式存储在数据库中,$2y$10$CaQON5WOEHcla58aBoIRKOmyYLBwtDHKFqk81y25.EGvjBqlF0W1W 我在登录页面上查询数据库,并检查用户电子邮件是否在数据库中 我已经在MySQL workbench中检查了我使用的查询是否有效,它返回的密码很好 但是,当我试图查询数据库中的密码并将其分配给变量时,在回显该变量不是字符
$hash=password\u hash($password,password\u DEFAULT)代码>
密码以散列形式存储在数据库中,$2y$10$CaQON5WOEHcla58aBoIRKOmyYLBwtDHKFqk81y25.EGvjBqlF0W1W
我在登录页面上查询数据库,并检查用户电子邮件是否在数据库中
我已经在MySQL workbench中检查了我使用的查询是否有效,它返回的密码很好
但是,当我试图查询数据库中的密码并将其分配给变量时,在回显该变量不是字符串时会出现错误
我试过$verify=password\u 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!';
}
谢谢大家的指点。我完成了现在有效的东西的组装,并针对工作和非工作帐户进行了测试
//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!';
}
感谢大家的指点。请在上面的$hash=mysqli\u query($mysqli,$sql\u e2)中显示查询数据库并将密码哈希分配给变量的完整代码
变量$hash将是一个布尔值-您需要在分配变量之前获取结果您的代码似乎容易受到sql注入的影响,通过直接在sql cmd中使用$email
-使用用户提供的数据函数mysqli_query()不会按预期返回值。成功时返回mysqli_结果对象,失败时返回false。因此,首先您必须检查它是否返回false,然后处理mysqli_结果对象(成功时),获取行(您可以使用mysqli_fetch_row)。请显示查询数据库的完整代码并将密码哈希分配给变量-在上面的$hash=mysqli_查询($mysqli,$sql_e2)中
变量$hash将是一个布尔值-您需要在分配变量之前获取结果您的代码似乎容易受到sql注入的影响,通过直接在sql cmd中使用$email
-使用用户提供的数据函数mysqli_query()不会按预期返回值。成功时返回mysqli_结果对象,失败时返回false。因此,首先必须检查它是否返回false,然后处理mysqli_result对象(如果成功),获取行(可以使用mysqli_fetch_row)。