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

CodeIgniter报错:stdClass对象无法转字符串,如何获取user_ID并插入

解决"Object of class stdClass could not be converted to string"报错问题

这个报错的根源很清晰:你的getUserName模型方法返回的是一个stdClass对象,但插入customer表时,user_id字段需要的是字符串或数字类型的纯值,PHP无法直接将对象转换为字符串,因此触发了这个错误。

下面给你两种实用的解决思路:

方法一:修改模型,直接返回user_id纯值

让模型直接返回user_id属性的值,这样控制器拿到的就是可以直接用的类型,无需额外处理:

public function getUserName($sales) {
    $this->db->select("user_id");
    $query = $this->db->get_where('user', ['name' => $sales]);
    // 直接提取user_id,没找到则返回null避免报错
    return $query->row()->user_id ?? null;
}

如果你更习惯用数组操作,也可以改用row_array():

public function getUserName($sales) {
    $this->db->select("user_id");
    $query = $this->db->get_where('user', ['name' => $sales]);
    $row = $query->row_array();
    return $row['user_id'] ?? null;
}

方法二:在控制器中处理返回的对象

如果不想改动模型代码,就在控制器里拿到对象后手动提取user_id属性:

$salesIDObj = $this->user_model->getUserName($sales);
// 先判断对象是否存在,避免找不到用户时触发新报错
$salesID = $salesIDObj ? $salesIDObj->user_id : null;

$result = $this->db->insert('customer', [
    'cust_name' => $customer,
    'cust_address' => $address,
    'category' => $category,
    'user_id' => $salesID
]);

额外提醒:建议始终加上判空逻辑,比如当通过sales用户名找不到对应用户时,row()会返回null,直接取属性会触发新的报错,用?? null或提前判断对象是否存在能让代码更健壮。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:44:11