gpt4 book ai didi

php - 解析获取给出无效的偏移量

转载 作者:行者123 更新时间:2023-11-29 07:29:42 26 4
gpt4 key购买 nike

不确定这里发生了什么,但我的 password_verify 语句返回了一个 undefined offset 。在数据库中,密码是必填字段,它不能为空,并且在尝试根据哈希验证密码之前,我已经验证至少返回了 1 个匹配行。当我在此语句之前使用 foreach 循环并检查结果变量时,它会很好地为我提供散列密码,因此我知道数组中至少有 1 个值。但是,当我尝试访问 $result[0] 时,由于某种原因抛出 undefined offset 。尝试查找但找不到相关信息,错误只是说明数组索引无效,这又是不可能的,因为我可以使用 foreach 检查结果变量并在其中查看散列密码。

还有第二个问题,因为我仍在学习 PDO,当我从提取请求中删除 PDO::FETCH_ASSOC 时,我在结果变量中得到了重复的条目。这是为什么?

登录.php

<?php
require "conn.php";

$email = $_POST['email'];
$email = strtolower($email);
$pass = $_POST['password'];

$stmt = $pdo->prepare("SELECT password FROM account WHERE email=:email");
$stmt->bindParam(":email", $email);
$stmt->execute();
$count = $stmt->rowCount(); // gets count of records found

if($count > 0) {
$result = $stmt->fetch(PDO::FETCH_ASSOC); // gets resultset
if(!password_verify($pass, $result[0])) {
echo "2";
} else
echo "0";
}
else {
echo "1";
}
?>

最佳答案

这会为您节省几毫秒,但是您应该先获取数据,然后在没有附加条件语句的情况下测试结果。由于您使用的是 PDO::FETCH_ASSOC,因此您应该使用列名作为标识符,而不是索引:

<?php
require "conn.php";

$email = $_POST['email'];
$email = strtolower($email);
$pass = $_POST['password'];

$stmt = $pdo->prepare("SELECT password FROM account WHERE email=:email");
$stmt->bindParam(":email", $email);
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC); // just fetch

if(!password_verify($pass, $result['password'])) { // note, column name as identifier, if the password is bad or the column is empty the test is valid
echo "2";
} else {
echo "0";
}
?>

此外,password_hash() 需要一个至少有 60 个字符宽的列。低于此值的任何内容都将导致测试失败。

关于php - 解析获取给出无效的偏移量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52044622/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com