Php mysqli_stmt::fetch();返回布尔值,但应返回数组
我正在制作一个简单的登录功能,代码确实有效(来自教程)。 它会导致错误通知: 注意:尝试访问中bool类型值的数组偏移量 为什么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
$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;
}