CodeIgniter - 在内存中的result_array

时间:2018-02-17 05:58:40

标签: php codeigniter

我不知道这是否是一个有效的编程问题。但是我对CodeIgniter有些不安。希望你们有多年的经验和智慧可以指导我。

这是我的故事,

我正在为项目使用CodeIgniter和MS SQL。我正在检索20M +行的销售数据。现在,我设法通过创建聚合数据并存储在表中来减少结果。我仍然得到了内存不足的错误。

现在,我在想,CodeIgniter的result_array()函数是否将所有结果存储到内存中?我对这个假设是对的吗?

如果是,我可以将其加载到块中吗?让我说我在内存中加载前100行,然后删除那100行,然后加载另外100行?所以PHP不会用结果填满我的记忆。

顺便说一句,我已经使用寻呼机获取详细数据。出于特定目的需要这个问题。我想展示一份总结报告。我正在使用jQwidgets Pivot Grid

我不知道这是否合理。但这就是我的想法。我想了解发生了什么。或者,您可以建议我可以使用其他选项或设计来处理PHP中的大数据。

希望我能清楚地解释自己。非常感谢你。我很感激你的所有建议。

1 个答案:

答案 0 :(得分:1)

我相信您正在寻找鲜为人知的unbuffered_row功能:

$query = $this->db->query("YOUR QUERY");

while ($row = $query->unbuffered_row())
{
        echo $row->title;
        echo $row->name;
        echo $row->body;
}
  

此方法返回单个结果行而不预取整个行   像row()那样产生内存。如果您的查询有多行,   它返回当前行并向前移动内部数据指针。

https://www.codeigniter.com/userguide3/database/results.html

你也可以得到一个数组:

$query->unbuffered_row('array');        // associative array