You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Model查询结果时出现Undefined array key错误求助

问题分析与解决

问题根源

你打印的$data结果是:

[{"key0":"2","key1":"admin","key2":"User Admin","key3":"***","key4":"1","tracker_createdat":"2023-07-03 08:12:42"}]

这是一个外层为数字索引的数组,里面的第0个元素才是包含用户信息的关联数组。你直接调用$data["key1"]会报错,因为外层数组的键是0,不存在"key1"这个键。

解决方案

有两种可行的修改方式:

方式一:修改控制器,获取数组内的单个用户记录

在打印$data之后,添加一行代码取出数组的第一个元素,再访问对应的键,同时修正字段对应错误:

public function loginVerify()
{
    $session = session();
    $userModel = new UserModel();
    $username = $this->request->getVar('key1');
    $password = $this->request->getVar('key2');
    
    $data = $userModel->getLoginSession($username);
    // $data = $userModel->getLoginSession()->where('key1', $username)->first();
    if(!empty($data)) { // 替换isset为!empty,避免空数组误判
        echo json_encode($data);
        $data = $data[0]; // 取出数组内的用户记录
        $pass = $data["key3"]; // 密码对应key3字段,别误取用户名
        $authenticatePassword = password_verify($password, $pass);
        if($authenticatePassword){
            $ses_data = [
                'id' => $data['key0'], // 用户ID对应key0字段
                'username' => $data['key1'], // 用户名对应key1字段
                'name' => $data['key2'], // 用户名称对应key2字段
                'isLoggedIn' => TRUE
            ];
            $session->set($ses_data);
            return redirect()->to('/users-list');
        }else{
            $session->setFlashdata('msg', 'Password is incorrect.');
            return redirect()->to('/login');
        }
    }else{
        $session->setFlashdata('msg', 'Email does not exist.');
        return redirect()->to('/login');
    }
}

方式二:修改Model的getLoginSession方法,返回单个记录

如果你的getLoginSession方法当前返回的是多条记录的集合(比如用了findAll()),修改它使用first()返回单个匹配的记录:

// 示例Model方法修改
public function getLoginSession($username)
{
    return $this->where('key1', $username)->first();
}

这样控制器里的$data直接就是单个关联数组,不需要额外取索引,可以直接访问$data["key1"]。

额外提示

  • 用!empty($data)替代isset($data),因为isset($data)对于空数组也会返回true,无法正确判断是否查询到用户。
  • 务必确认字段对应关系,避免像原代码那样把用户名当成密码取的错误。

内容的提问来源于stack exchange,提问作者Ryan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 00:12:48