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

PHP mysqli OOP获取全部对象记录列表及属性访问报错如何解决

问题根源

  • mysqli_result::fetch_object() 单次调用仅返回结果集中的第一条记录,你当前的 find_all_users() 方法直接返回了单条用户对象,而非所有用户组成的对象数组。当你在前端对单个 stdClass 对象执行 foreach 遍历时,实际遍历的是这个对象的属性值(比如 id 对应的值 1、name 对应的值 bigjah 等),遍历得到的 $user 是整型、字符串这类基础类型,自然不是对象,访问 $user->id 就会触发非对象属性报错。
  • 你前端代码用数组下标 $user['name'] 访问 stdClass 对象属性的写法本身也不合法,stdClass 对象的属性必须用 -> 运算符访问。

修复方案

第一步:修改find_all_users方法,返回全量用户对象数组

public static function find_all_users()
{
    $db = getConn();

    $stmt = $db->prepare("
     SELECT * 
     FROM users 
     JOIN roles 
     WHERE roles.role_id = users.role_id 
     ORDER BY created_at");

    $stmt->execute();
    $result = $stmt->get_result();
    $stmt->close();
    
    // 循环拉取所有记录存入对象数组
    $users = [];
    while ($user = $result->fetch_object()) {
        $users[] = $user;
    }
    return $users;
}

第二步:修改前端遍历代码,用对象运算符访问属性

注:原代码h2标签内有多余的</a>闭合标签,可同步删除

<?php if (!empty($users)) : ?>

    <ul>
    <?php foreach ($users as $user) : ?>
            <li>
                <div>
                    <h2><?= $user->name ?></h2>
                    <p><?= $user->email ?></p>
                </div>
            </li>
    <?php endforeach; ?>
    </ul>

<?php else : ?>

    <p>No User found.</p>

<?php endif; ?>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:18:01