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

CodeIgniter数据库记录展示问题求助:变量未定义与foreach错误

解决CodeIgniter中数据库列表展示的变量未定义与foreach错误

嗨,刚上手CodeIgniter碰到这种问题太正常了,我帮你一步步拆解问题,从MVC三层的规范写法入手,搞定这两个报错~

先明确错误根源

你的两个错误其实是连锁的:

  • Undefined variable: query:视图(View)里尝试使用$query变量,但控制器(Controller)压根没把这个变量传递过来,或者传递的变量名不匹配
  • foreach无效参数:你传给foreach的不是可迭代的数组/结果集,大概率是null或者非迭代类型,本质还是数据没正确从Controller传到View,或者Model没返回正确的数据

给你一套可直接复用的正确代码示例

1. Model层(application/models/Record_model.php)

先写一个负责从数据库取数据的模型,确保返回正确的结果集:

<?php
class Record_model extends CI_Model {
    public function __construct() {
        parent::__construct();
        $this->load->database(); // 加载数据库连接
    }

    // 获取所有记录的方法
    public function get_all_records() {
        // 这里替换成你的表名,比如'users'
        $query = $this->db->get('your_table_name');
        // 返回结果数组,foreach可以直接遍历
        return $query->result_array(); 
        // 如果要返回对象形式,用$query->result();
    }
}

2. Controller层(application/controllers/Dashboard.php)

控制器负责调用模型、获取数据,再传递给视图,这里的变量名一定要和视图里用的对应上:

<?php
class Dashboard extends CI_Controller {
    public function __construct() {
        parent::__construct();
        // 加载刚才写的模型
        $this->load->model('Record_model');
    }

    public function index() {
        // 调用模型方法获取数据,把结果存在$data数组里
        $data['records'] = $this->Record_model->get_all_records();
        // 把$data传递给视图,这里的视图文件名是dashboard.php
        $this->load->view('dashboard', $data);
    }
}

3. View层(application/views/dashboard.php)

视图里先判断数据是否存在,再用foreach遍历,避免空数据时报错,同时加上点击交互:

<h1>数据库记录列表</h1>
<table border="1" cellpadding="8">
    <tr>
        <!-- 替换成你的表字段名,比如'id', 'name', 'email' -->
        <th>ID</th>
        <th>名称</th>
        <th>操作</th>
    </tr>
    <?php
    // 先判断变量是否存在且不为空
    if(isset($records) && !empty($records)) {
        foreach($records as $row) {
    ?>
        <tr>
            <td><?php echo $row['id']; ?></td>
            <td><?php echo $row['name']; ?></td>
            <!-- 点击跳转到详情页的交互示例,这里用site_url生成链接 -->
            <td><a href="<?php echo site_url('dashboard/detail/'.$row['id']); ?>">查看详情</a></td>
        </tr>
    <?php
        }
    } else {
        // 没有数据时的提示
        echo '<tr><td colspan="3">暂无记录</td></tr>';
    }
    ?>
</table>

你可能踩的坑(重点排查)

  • Controller忘记加载Model:如果没写$this->load->model('Record_model');,调用模型方法时直接报错,数据自然传不到View
  • 变量名不匹配:比如Controller里传的是$data['records'],但View里却用$query,肯定会报“未定义变量”
  • Model没返回结果集:比如Model里只写了$this->db->get('your_table_name');,没写return,或者误用了row()(只返回单条记录)而不是result_array()/result()
  • foreach直接循环未定义变量:没加isset($records)判断,当数据库没数据时,$records是空数组,虽然foreach可以遍历空数组,但如果变量压根没传,就会报错

按照上面的代码调整后,应该就能正常展示列表并支持点击交互了,要是还有问题可以把你的代码片段贴出来再细化排查~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:06:40