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

大行数表查询失败,仅添加LIMIT限制时可正常获取数据

解决大表移除LIMIT后无法获取数据的问题

可能的原因及对应解决方法

1. PHP内存耗尽

当查询返回大量数据时,result()会一次性把所有结果加载到内存,容易触发PHP内存限制。

  • 临时调整内存:在代码开头增加内存限制配置
    ini_set('memory_limit', '256M'); // 可根据实际需求调至512M或更高
    
  • 优化查询字段:只获取业务需要的字段,减少内存占用
    $this->db->select('PrshId, PrshNama, PrshAlamat'); // 替换为你实际需要的字段
    $this->db->where('PrshStatus', 'A');
    $this->db->where('PrshJenis', '1');
    return $this->db->from('TPerusahaan')->get()->result();
    

2. 执行超时

大量数据查询可能超出PHP默认的执行时间限制。

  • 调整执行时间:
    set_time_limit(60); // 设置为60秒,可按需调整
    

3. 数据库配置限制

部分数据库(如MySQL)的max_allowed_packet参数过小,会导致大量数据无法正常返回。

  • 检查并调大数据库配置:联系运维或修改数据库配置文件,提升max_allowed_packet的值。

4. 改用逐行读取的结果处理方式

CodeIgniter的unbuffered_row()可以逐行读取数据,避免一次性加载全量数据到内存:

$query = $this->db->where('PrshStatus', 'A')
                  ->where('PrshJenis', '1')
                  ->from('TPerusahaan')
                  ->get();

$results = [];
while ($row = $query->unbuffered_row()) {
    $results[] = $row;
    // 也可在此处直接处理单条数据,无需存储所有结果
}
return $results;

5. 前端/客户端处理瓶颈

如果是返回前端后无法展示,大概率是前端无法处理海量数据,建议后端做分页处理:

$page = $this->input->get('page', true) ?: 1;
$perPage = 50;
$offset = ($page - 1) * $perPage;

$this->db->where('PrshStatus', 'A');
$this->db->where('PrshJenis', '1');
$this->db->limit($perPage, $offset);

return [
    'data' => $this->db->from('TPerusahaan')->get()->result(),
    'total' => $this->db->count_all_results('TPerusahaan', false) // false避免重置查询条件
];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 04:15:42