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
相关产品推荐
相关产品推荐

