普通用户登录报Trying to get property 'id' of non-object错误求助
你遇到的报错核心原因是处理普通用户登录逻辑时,$query不是有效对象,无法读取id属性。管理员账号能正常登录是因为查询管理员账号时$query能返回匹配的对象,普通用户查询没有返回结果。
解决步骤
- 优先补全查询结果校验逻辑,先确认
$query是有效对象且包含对应属性,再执行会话赋值操作,避免空对象调用属性报错。 - 检查账号查询逻辑,确认是否加了管理员角色的限定条件,导致普通用户账号无法匹配到查询结果。如果普通用户和管理员存在不同的身份字段、或者分表存储,要分开写查询逻辑,不要复用管理员的查询代码。
- 如果普通用户和管理员的登录状态需要分开标识,不要都用
_admin_开头的会话字段,避免后续权限判断出现串权问题。 - 排查时可以在查询后临时加打印逻辑输出
$query的值,确认普通用户登录时$query的返回结果,快速定位是查询条件问题还是数据缺失问题。
优化后代码示例
// 先校验查询结果有效性,再处理登录逻辑 if (is_object($query) && isset($query->id, $query->name, $query->email, $query->status)) { $data = array( '_admin_id' => $query->id, '_admin_name' => $query->name, '_admin_email' => $query->email, '_admin_loggedin' => TRUE, '_admin_status' => $query->status ); $this->session->set_userdata($data); } else { // 登录失败逻辑,可根据业务需求调整 $this->session->set_flashdata('login_error', '账号或密码错误,请重试'); redirect('/login'); }
内容的提问来源于stack exchange,提问作者Rishabh Gupta
相关产品推荐
相关产品推荐

