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

PHP报错:Trying to get property 'message' of non-object 如何修复?

解决PDO获取数据时的"non-object"错误

嘿,这个错误我太熟了!咱们来快速定位问题并修复它:

错误原因

你在第11行用$r->message访问数据,但$query->fetch()默认返回的是混合数组(关联数组+索引数组),不是对象。所以当你尝试用对象的属性访问语法->去操作数组时,就会抛出"Trying to get property 'message' of non-object"的错误。另外,你的代码里还有个小笔误:<br少了闭合的>,也顺手改了吧。

两种修复方案

方案1:改用对象模式获取数据

把fetch()改成fetch(PDO::FETCH_OBJ),这样返回的就是对象,就能用->message访问了:

<?php 
try { 
    $handler = new PDO('mysql:host=127.0.0.1;dbname=group_projectdb','root',''); 
} catch (Exception $e) { 
    echo $e->getMessage(); 
    die(); 
} 
$query = $handler->query('SELECT * FROM security'); 
while ($r = $query->fetch(PDO::FETCH_OBJ)) { // 修改fetch模式为对象模式
    echo $r->message,'<br>'; // 补全<br>的闭合标签
} 
?>

方案2:用数组索引访问数据

保持默认的fetch模式,把$r->message改成数组形式$r['message']:

<?php 
try { 
    $handler = new PDO('mysql:host=127.0.0.1;dbname=group_projectdb','root',''); 
} catch (Exception $e) { 
    echo $e->getMessage(); 
    die(); 
} 
$query = $handler->query('SELECT * FROM security'); 
while ($r = $query->fetch()) { 
    echo $r['message'],'<br>'; // 改用数组索引访问字段
} 
?>

额外小技巧

如果希望所有PDO查询默认都返回对象,可以在初始化PDO的时候设置全局属性:

$handler = new PDO('mysql:host=127.0.0.1;dbname=group_projectdb','root','');
$handler->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);

这样后续所有的fetch()都会默认返回对象,不用每次都手动指定模式啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:38:01