Question: The normal `result()` method described in the documentation appears to load all records immediately. My application needs to load about 30,000 rows, and one at a time, submit them to a third-party search index API. Obviously loading everything into memory at once doesn't work well (errors out because of too much memory).

So my question is, how can I achieve the effect of the conventional MySQLi API method, in which you load one row at a time in a loop?

Answer: 
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.
Well, the thing is that `result()` gives away the entire reply of the query. `row()` simply fetches the first case and dumps the rest. However the query can still fetched 30 000 rows regardles of which function you use.

One design that would fit your cause would be:

```
$offset = (int)@$_GET['offset'];

$query = $this-db->query("SELECT * FROM table LIMIT ?, 1", array($offset));
$row = $query->row();

if ($row) {

    /* Run api with values */

    redirect(current_url().'?offset'.($offset + 1));

}

```

This would take one row, send it to api, update the page and use the next row. It will alos prevent the page from having a timeout. However it would most likely take a while with 30 000 records and refreshes, so you may wanna adjust your `LIMIT ?, 1` to a higher number than `1` and go `result()` and `foreach()` multiple apis per pageload.