PHP出现Trying to get property of non-object错误,求分析解决
错误分析与解决:Trying to get property of non-object
错误原因
- 核心原因:传入的
$status参数在messages表中没有匹配的name记录,此时get_where()返回空结果集,调用->row()会得到null(非对象),后续尝试访问->message属性就会触发该通知错误。 - 次要可能原因:数据库表名拼写错误、数据库连接异常导致查询未正常执行,最终返回空结果集。
解决办法
方案1:先校验查询结果再取值
在获取message属性前,先检查查询是否有匹配记录,避免直接访问非对象的属性:
function status_message($status){ $ci = &get_Instance(); $query = $ci->db->select('message') ->get_where('messages', array('name' => $status)); // 确认存在匹配记录后再取值 if ($query->num_rows() > 0) { return $query->row()->message; } // 无匹配时返回自定义默认值,可根据业务需求调整 return '未知状态'; }
方案2:使用数组形式获取结果
改用row_array()以数组形式获取结果,通过isset判断字段是否存在,避免对象访问的问题:
function status_message($status){ $ci = &get_Instance(); $result = $ci->db->select('message') ->get_where('messages', array('name' => $status)) ->row_array(); return isset($result['message']) ? $result['message'] : '未知状态'; }
额外建议
- 调用
status_message()函数前,先校验$status参数的合法性,确保传入的是系统预定义的状态值,减少无匹配记录的场景。 - 检查
messages表的结构,确认name字段存在且数据已正确存入,避免因表结构或数据问题导致查询失败。
内容的提问来源于stack exchange,提问作者Noman Uddin
相关产品推荐
相关产品推荐

