CodeIgniter Active Record: Load One Row at a Time CodeIgniter Active Record: Load One Row at a Time codeigniter codeigniter

CodeIgniter Active Record: Load One Row at a Time


Here is something you can do.

while ($row = $result->_fetch_object()) {  $data = array(    'id'         => $row->id    'some_value' => $row->some_field_name  );  // send row data to whatever api  $this->send_data_to_api($data);}

This will get one row at the time. Check the CodeIgniter source code, and you will see that they will do this when you execute the result() method.


For those who want to save memory on large result-set:

Since CodeIgniter 3.0.0,There is a unbuffered_row function,

All the methods above will load the whole result into memory (prefetching). Use unbuffered_row() for processing large result sets.

 

This method returns a single result row without prefetching the whole result in memory as row() does. If your query has more than one row, it returns the current row and moves the internal data pointer ahead.

$query = $this->db->query("YOUR QUERY");while ($row = $query->unbuffered_row()){    echo $row->title;    echo $row->name;    echo $row->body;}

You can optionally pass ‘object’ (default) or ‘array’ in order to specify the returned value’s type:

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

Official Document: https://www.codeigniter.com/userguide3/database/results.html#id2


Well, there'se the row() method, which returns just one row as an object, or the row_array() method, which does the same but returns an array (of course).

So you could do something like

$sql = "SELECT * FROM yourtable";$resultSet = $this->db->query($sql);$total = $resultSet->num_rows();for($i=0;$i<$total;$i++) {  $row = $resultSet->row_array($i);}

This fetches in a loop each row from the whole result set.
Which is about the same as fetching everyting and looping over the $this->db->query($sql)->result() method calls I believe.

If you want a row at a time either you make 30.000 calls, or you select all the results and fetch them one at a time or you fetch all and walk over the array. I can't see any way out now.