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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 08:50:19