从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)
那么为什么在我得到它之后,这个值不是字符串呢?如何检索正确的值

我的问题是:

   $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)。