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

CodeIgniter中stdClass对象无法转为字符串错误求助

解决Error: Object of class stdClass could not be converted to string问题

嘿,我来帮你搞定这个报错!这个问题的根源很明确:你从getCompanyName方法拿到的不是一个字符串,而是一个stdClass对象(从你print_r的输出也能看到:stdClass Object ( [company_name] => ASGB )),但getStaffDetails方法需要的是字符串类型的公司名称,所以当你把对象传入查询条件时,CodeIgniter尝试把对象转成字符串就触发了这个错误。

具体修改方案

有两种简单的解决方式,推荐第一种(在模型层处理数据更规范):

方案1:修改Staff_model的getCompanyName方法,直接返回字符串

把原来返回整个对象的逻辑,改成返回对象里的company_name属性值,还可以加个空值判断避免报错:

function getCompanyName($user_id) {
    $result = $this->db->select('company_name')
                       ->from('user_login')
                       ->where(array('id' => $user_id,'delete_flag'=>0))
                       ->get()
                       ->row();
    // 检查是否获取到有效数据,避免空对象调用属性报错
    return $result ? $result->company_name : '';
}

方案2:在控制器里提取对象的属性值

如果你不想改模型,也可以在控制器里把对象转成字符串再传递:

$company_name_obj = $this->staff_model->getCompanyName($user_id);
$company_name = $company_name_obj->company_name; // 提取字符串值
$data['staff'] = $this->staff_model->getStaffDetails($company_name);

为什么会出现这个错误?

CodeIgniter的row()方法返回的是一个封装了查询结果的对象,每个数据库字段对应对象的一个属性。你直接把这个对象传给getStaffDetails的$company_name参数,在执行get_where时,框架会尝试把这个对象转成字符串用于SQL查询,而PHP无法直接将stdClass对象转为字符串,所以就抛出了这个错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 19:52:35