CodeIgniter 3执行foreach报错Invalid argument supplied for foreach() 读取id列失败
CodeIgniter 3 遍历查询结果报错"Invalid argument supplied for foreach()"排查方案
错误产生原因
- 模型的
get_users()方法未返回查询结果:$this->db->get('users')仅执行了SQL查询操作,但没有获取结果集,也没有将结果返回给控制器调用方,导致控制器中拿到的$result值为null,不符合foreach要求遍历参数为数组/可遍历对象的规则,触发报错。 - 额外兼容场景:即使模型返回了结果集,若数据表为空时返回空值,也可能触发同类报错,建议增加前置判断逻辑。
对应解决方法
1. 修正模型代码,返回符合要求的结果集
调整User_model的get_users()方法,调用result()获取对象格式的结果集并返回,和你控制器中$object->id的取值写法适配:
<?php class User_model extends CI_Model { public function get_users(){ $query = $this->db->get('users'); // 返回对象格式的结果集 return $query->result(); } } ?>
如果你需要数组格式的结果,可以把return $query->result()替换为return $query->result_array(),对应控制器取值改为$item['id']即可。
2. 控制器增加非空判断(可选,推荐添加增强鲁棒性)
遍历前先判断结果集有效性,避免表内无数据时再次触发报错:
<?php class Users extends CI_Controller { public function show(){ $this->load->model('user_model'); $result = $this->user_model->get_users(); // 先校验结果有效性再遍历 if (!empty($result) && is_array($result)) { foreach($result as $object){ echo $object->id; } } else { echo "未查询到匹配的用户数据"; } } } ?>
内容的提问来源于stack exchange,提问作者qazidev
相关产品推荐
相关产品推荐

