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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 04:55:42