0

我正在运行一个选择多行的查询。当我遍历结果时,我想一次获取一行(因为一次获取​​它们的内存太多)。

问题是,CodeIgniter 的所有变体的活动记录 $query->row 会将数据库中的所有记录提取到内存中(并返回单行)。我查看了 DB_result.php 的来源,发现:

public function row_object($n = 0)
{
    $result = $this->result_object();
    if (count($result) == 0)
    {
        return $result;
    }

    if ($n != $this->current_row AND isset($result[$n]))
    {
        $this->current_row = $n;
    }

    return $result[$this->current_row];
}

在 result_object() 内部:

...
while ($row = $this->_fetch_assoc())
{
    $this->result_array[] = $row;
}

这会将数据库中的所有记录提取到内存中。

是否有一种解决方法可以让我在不将整个结果集加载到内存的情况下获取单行?

4

1 回答 1

2

解决方案

$query = $this->db->get();
while($r = $query->_fetch_object()){
    ...
}

可能是他们将其公开的原因...

于 2013-01-24T11:36:59.577 回答