Codeigniter数组展示数据报错:尝试读取字符串属性
CodeIgniter遍历数据报错:Attempt to read property "" on string
问题代码回顾
控制器代码
public function bid_data() { $user = $this->session->userdata('user'); $id = $user['id']; $this->load->model('GetModel'); $data['admin'] = $this->GetModel->auction_data($id); if(!empty($data['admin'])){ $this->load->view('user/bidData',$data); }else{ $this->session->set_flashdata('no_record','<b>Sorry</b> No record found !!'); redirect(base_url().'user/UserSubmit'); } }
视图代码
<?php foreach($admin as $row): ?> <tr style="text-align:center"> <td class="list"><?php echo $row->sno; ?></td> <td class="list"><a href="<?php echo base_url().'user/bid_result/remove/'.$id ;?>">remove</a></td> <td class="list"><a href="">win</a></td> </tr> <?php endforeach; ?>
模型代码
public function auction_data($id) { $query = $this->db->get_where('user_bid',['id'=> $id]); return $query->row(); }
错误原因
模型中$query->row()返回的是单个对象,而非可遍历的结果数组,但视图里用foreach尝试遍历这个对象,导致PHP将对象视为非迭代类型,触发"尝试读取字符串的属性"错误。
修正方案
方案1:需要返回多条记录(支持遍历)
修改模型,用result()返回对象数组:
public function auction_data($id) { $query = $this->db->get_where('user_bid',['id'=> $id]); return $query->result(); // 返回多条记录的对象数组,可直接foreach遍历 }
同时修正视图中未定义的$id变量:
<td class="list"><a href="<?php echo base_url().'user/bid_result/remove/'.$row->id ;?>">remove</a></td>
方案2:仅需单条记录(无需遍历)
如果对应id只有一条数据,直接去掉foreach,直接访问对象属性:
<tr style="text-align:center"> <td class="list"><?php echo $admin->sno; ?></td> <td class="list"><a href="<?php echo base_url().'user/bid_result/remove/'.$admin->id ;?>">remove</a></td> <td class="list"><a href="">win</a></td> </tr>
内容的提问来源于stack exchange,提问作者stikendra
相关产品推荐
相关产品推荐

