CodeIgniter获取最大值报错解决:无法将CI_DB_mysqli_result转为整数
解决CodeIgniter中获取数据库最大值生成ID的错误问题
你遇到的这个Object of class CI_DB_mysqli_result could not be converted to int错误,核心原因很直白:你直接把数据库查询返回的结果对象当成了整数值来用,这肯定行不通。
问题出在哪?
$this->db->get('orientation_master')执行后返回的是一个CI_DB_mysqli_result对象,它包含了查询的元数据、结果集等信息,并不是你想要的那个最大值数字。你直接拿这个对象和0比较、做加法,PHP自然会报错说无法把对象转换成整数。
修正后的模型代码
我们需要先从结果对象里提取出实际的最大值,再进行逻辑处理:
public function next_id() { // 执行查询,获取p_ori_id的最大值 $this->db->select_max('p_ori_id'); $query = $this->db->get('orientation_master'); // 从结果对象中取出单行数据(数组格式) $result = $query->row_array(); // 提取最大值字段的具体值 $max_id = $result['p_ori_id']; // 判断逻辑:如果表为空(max_id为null),则next_id设为1,否则在最大值基础上加1 $next_id = $max_id ? ($max_id + 1) : 1; return $next_id; }
如果你习惯用对象形式取值,也可以替换成这两行:
$row = $query->row(); $max_id = $row->p_ori_id;
额外提醒
这种手动生成ID的方式存在并发风险——如果多个用户同时触发这个方法,很可能会生成重复的ID。如果业务允许,更稳妥的方案是给orientation_master表的p_ori_id字段设置为自增主键,这样插入数据时数据库会自动生成唯一ID,完全不需要手动处理,既安全又省心。
内容的提问来源于stack exchange,提问作者John David
相关产品推荐
相关产品推荐

