You need to enable JavaScript to run this app. CodeIgniter报Cannot use CI_DB_mysql_result as array错误如何解决
优惠活动
大模型
产品
解决方案
定价
更多

CodeIgniter报Cannot use CI_DB_mysql_result as array错误如何解决

问题根因说明

你代码中出现结果操作报错、无法取到查询值的核心原因有两个:

  • 直接将$this->db->get()返回的CI_DB结果对象当作数组使用,用$result[0]的方式取值,本身就不符合对象的访问规则
  • 之前尝试调用结果处理方法时,误用了其他框架的驼峰命名方法(比如getResult()),和CodeIgniter原生提供的方法名不匹配
正确取值操作步骤
  1. 先完成数据库初始化,确保$this->db是有效的数据库连接实例:如果没有显式加载数据库类,先执行$this->load->database(),否则后续所有db方法调用都会报错
  2. 正常执行查询拿到结果对象:
    $this->db->select('COUNT(choice) as choices_count');
    $this->db->from('js_libraries');
    $this->db->where('choice', $i);
    $query = $this->db->get();
    
  3. 调用结果对象自带的原生方法取数,CodeIgniter 2/3版本提供的可用方法都是小写命名,不存在驼峰形式的getResult():
    • 取单条查询结果(适合你这种COUNT聚合的单值返回场景),用row_array()把结果转成关联数组:
      $row = $query->row_array();
      $votes = $row['choices_count'];
      
    • 取多条查询结果,用result_array()把结果转成二维数组,再按下标取对应值:
      $rows = $query->result_array();
      $votes = $rows[0]['choices_count'];
      
代码优化建议

你当前的循环写法每一轮都单独执行一次数据库查询,5轮循环就会产生5次独立的数据库请求,性能浪费明显。可以直接用分组查询一次性拿到所有投票的计数:

// 一次性查询全量分组计数
$this->db->select('choice, COUNT(choice) as choices_count');
$this->db->from('js_libraries');
$this->db->group_by('choice');
$count_query = $this->db->get();
// 把结果整理为 「choice值 => 计数值」 的映射数组
$count_map = array_column($count_query->result_array(), 'choices_count', 'choice');

// 循环拼表格时直接从映射数组取值即可
for ($i = 1; $i < 5; $i++) {
    $votes = $count_map[$i] ?? 0;
    $table_rows .= "<tr><td>" . $libraries[$i] . " Got:</td><td><b>" . $votes . "</b> votes</td></tr>";
}

之前遇到的“方法不存在”报错,基本是两种场景:一是方法名拼写错误,把CodeIgniter原生的row_array()、result_array()写成了其他框架的驼峰命名格式;二是没有正确初始化数据库连接,拿到的返回值根本不是CI_DB_result类的实例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 20:36:07