Connection::query()
method returns a Nextras\Dbal\Result\Result
instance. You can call fetching methods to get the fetched data.
Result::fetchAll()
returns an array of Nextras\Dbal\Result\Row
instances.Result::fetch()
returns the next unfetched Row
instance.Result::fetchField($column)
returns nth column of the next unfetched Row
instance.Result::fetchPairs($key, $value)
transforms all fetched Row
instances into an associative array, see examples below.$result = $connection->query('SELECT ...'); foreach ($result as $row) { // equals to $result->fetchAll() as $row } $result = $connection->query('SELECT ...'); $row = $result->fetch(); $result = $connection->query('SELECT name FROM ...'); $name = $result->fetchField(); $result = $connection->query('SELECT name, age FROM ...'); $assoc = $result->fetchPairs('name', 'age'); // ['peter' => 20, 'john' => 13] $assoc = $result->fetchPairs(null, 'age'); // [20, 13] $assoc = $result->fetchPairs('name', null); // [ // 'peter' => new Row(['name' => 'peter', 'age' => 20]), // 'john' => new Row(['name' => 'john', 'age' => 13]), // ]
Row instances hold the data of specific fetched result-row. You can access data by property access with a column name. Use getNthField()
method to retrieve a column by its numeric index.
$row = $connection->query('SELECT name, age FROM ...')->fetch(); echo $row->name; echo $row->age; echo $row->getNthField(0); // prints name
Some database drivers do not support rewinding or seeking the result. I.e. you cannot iterate over the result multiple times. Similarly, you cannot use seek()
method to skip some rows. Dbal’s emulated buffering comes to solve this for you. The relevant drivers automatically enable emulated buffering. You can disable or enable it for particular Result
instances.
$result = $connection->query('...')->buffered(); // enable emulated buffering $result->unbuffered(); // disable the emulated buffering
If the unbuffered Result was already partially consumed, enabling buffering does nothing and Result will potentially throw an exception when rewinded or seeked. If the buffered Result was already partially consumed, disabling buffering does nothing and Result will still use the buffer.