Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysqli_stmt::fetch();返回布尔值,但应返回数组_Php_Mysqli - Fatal编程技术网

Php mysqli_stmt::fetch();返回布尔值,但应返回数组

Php mysqli_stmt::fetch();返回布尔值,但应返回数组,php,mysqli,Php,Mysqli,我正在制作一个简单的登录功能,代码确实有效(来自教程)。 它会导致错误通知: 注意:尝试访问中bool类型值的数组偏移量 为什么$row=$query->fetch()返回布尔值而不是数组 具有正确登录数据的var\u dump($query)结果: object(mysqli_stmt)#2 (10) { ["affected_rows"]=> int(-1) ["insert_id"]=> int(0) [&q

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

注意:尝试访问中bool类型值的数组偏移量

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

具有正确登录数据的
var\u dump($query)
结果:

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\u转储($row)
bool(true)

mysqli\u stmt::fetch()
方法不返回数组。它总是返回一个布尔值

您要查找的是
mysqli\u结果
对象。您可以通过调用
get\u result()
来获取该对象。此对象具有类似于
fetch\u assoc()
的方法,这些方法将返回一个值数组。例如:

$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变量

$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;
}

我相信如果没有找到/返回任何记录,
fetch()
将返回false。您转储的语句似乎证实了这一点:
[“num_rows”]=>int(0)
Magnus的简单语言注释:在数据库中输入一些数据,它就会工作!;-)谢谢也用于编辑。不过数据库中有数据。我不知道为什么请求没有返回结果。数据库中有一个索引号。我删除了条目,然后添加了新条目。但是,在我删除条目后,新条目的索引号不是从1开始的。这会导致查找条目时出现问题吗?我通过重置它进行了测试,因此索引编号再次从1开始。似乎不是这样。
$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;
}