CodeIgniter视图无法列出数据库对象结果:未定义变量data报错
解决CodeIgniter中"Undefined variable: data"的错误
看起来你遇到的核心问题是视图里找不到名为$data的变量,这通常是因为模型没返回数据、控制器没把数据传递给视图,或者视图里的变量名不匹配导致的。咱们一步步来修复:
1. 先修复你的Search_model
你当前的get_locations方法只执行了SQL查询,但没有把结果返回出去!CodeIgniter的模型方法需要明确返回数据,控制器才能拿到。修改模型代码:
class Search_model extends CI_Model { public function get_locations() { // 先修正SQL的拼写错误(你写的fro应该是from) $query = $this->db->query("Select bolgekodu, bolgeadi FROM your_table_name"); // 替换成实际表名 // 返回查询结果,这里用result()会返回对象数组,或者用result_array()返回关联数组 return $query->result(); } }
注意:记得把SQL里的your_table_name换成你实际的表名,还有你原来的SQL里fro是拼写错误,要改成FROM哦。
2. 在控制器中调用模型并传递数据到视图
你需要在对应的控制器方法里加载模型,调用方法获取数据,然后把数据传给视图。举个例子:
class Search extends CI_Controller { public function index() { // 加载模型 $this->load->model('Search_model'); // 调用模型方法获取数据 $location_data = $this->Search_model->get_locations(); // 把数据打包成数组,传给视图(这里的键名就是视图里要用的变量名) $data['locations'] = $location_data; // 加载视图,同时传递$data数组 $this->load->view('include_files/search_inc', $data); } }
这里要注意:
- 控制器里传给视图的数组键名
locations,在视图里对应的变量是$locations,不是$data!很多新手会搞混这一点。 - 确保控制器正确加载了模型,并且视图路径是对的。
3. 在视图中正确使用变量并处理空数据
现在在你的search_inc.php视图里,你可以循环$locations变量了,同时最好先判断变量是否存在,避免再次出现Undefined的错误:
// 先检查变量是否存在且有数据 if (isset($locations) && !empty($locations)) { foreach ($locations as $location) { // 输出数据,比如: echo $location->bolgekodu . ' - ' . $location->bolgeadi . '<br>'; } } else { echo '没有找到任何位置数据'; }
如果你在视图里之前用的是$data,那肯定会报错,因为控制器传递的是$locations(对应数组里的键locations),所以要把视图里的变量名改成和控制器传递的键名一致。
为什么会出现这个错误?
- 模型没返回数据:你的原模型方法只执行了查询,没有return结果,导致控制器拿不到数据。
- 控制器没传递数据:如果控制器没把数据数组传给视图,视图里自然找不到对应的变量。
- 变量名不匹配:控制器传递的键名和视图里用的变量名不一致,比如控制器传的是
$data['locations'],视图里却用$data,这就会导致Undefined。
内容的提问来源于stack exchange,提问作者Ceyhun Ganioglu
相关产品推荐
相关产品推荐

