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
相关产品推荐
相关产品推荐

