mysqli_stmt::fetch();返回一个布尔值但预计返回一个数组 [英] mysqli_stmt::fetch(); returns a boolean value but is expected to return an array

查看:25
本文介绍了mysqli_stmt::fetch();返回一个布尔值但预计返回一个数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在制作一个简单的登录功能,代码确实有效(来自教程).它导致错误通知:

I am making a simple Log-in feature, with code that has definitely worked (from a tutorial). It results in an error notice:

注意:尝试在

为什么 $row = $query->fetch(); 返回的是布尔值而不是数组?

Why does $row = $query->fetch(); return a boolean value and not an array?

具有正确登录数据的 var_dump($query) 结果:

Result of the var_dump($query) with a correct login data:

object(mysqli_stmt)#2 (10) { 
    ["affected_rows"]=> int(-1) 
    ["insert_id"]=> int(0) 
    ["num_rows"]=> int(0) 
    ["param_count"]=> int(1) 
    ["field_count"]=> int(3) 
    ["errno"]=> int(0) 
    ["error"]=> string(0) "" 
    ["error_list"]=> array(0) { }
    ["sqlstate"]=> string(5) "00000" 
    ["id"]=> int(1) 
}

var_dump($row) 的结果:bool(true)

if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST['submit'])) {
    $email = trim($_POST["email"]);
    $password = trim($_POST["password"]);

        if($query = $db->prepare("SELECT * FROM user WHERE email = ? ")) {
            $query->bind_param("s",$email);
            $query->execute();
            var_dump($query);
            $row = $query->fetch();
            var_dump($row);
            if($row) {
                if(password_verify($password, $row['password'])) {
                    header("location:https://stackoverflow.com/");
                    exit;
                }
            }
         }
}

推荐答案

mysqli_stmt::fetch() 方法不返回数组.它总是返回一个布尔值.

mysqli_stmt::fetch() method does not return an array. It always returns a boolean.

您正在寻找的是 mysqli_result 对象.您可以通过调用 get_result() 来获取该对象.该对象具有像 fetch_assoc() 这样的方法,它们将返回一个值数组.例如:

What you are looking for is the mysqli_result object. You can get that object by calling get_result(). This object has methods like fetch_assoc() that will return an array of values. For example:

$query = $db->prepare("SELECT * FROM user WHERE email = ? ");
$query->bind_param("s", $email);
$query->execute();
$row = $query->get_result()->fetch_assoc();
if ($row && password_verify($password, $row['password'])) {
    header("location:https://stackoverflow.com/");
    exit;
}

但是,如果您希望从数据库中选择单个字段,那么您可以使用 mysqli_stmt::fetch() 但您必须将 SQL 列绑定到 PHP 变量.

However, if you wish to select a single field from the database then you can use mysqli_stmt::fetch() but you must bind the SQL column to a PHP variable.

$query = $db->prepare("SELECT password FROM user WHERE email = ? ");
$query->bind_param("s", $email);
$query->execute();
$query->bind_result($hashedPassword);
if ($query->fetch() && password_verify($password, $hashedPassword)) {
    header("location:https://stackoverflow.com/");
    exit;
}

这篇关于mysqli_stmt::fetch();返回一个布尔值但预计返回一个数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆