PHPKonf İstanbul PHP Conference 2015



(PHP 5 >= 5.3.0)

mysqli_result::fetch_all -- mysqli_fetch_allObtener todas las filas en un array asociativo, numérico, o en ambos


Estilo orientado a objetos

mixed mysqli_result::fetch_all ([ int $resulttype = MYSQLI_NUM ] )

Estilo por procedimientos

mixed mysqli_fetch_all ( mysqli_result $result [, int $resulttype = MYSQLI_NUM ] )

mysqli_fetch_all() consulta todas las filas y devuelve el resultado en un array asociativo, numérico, o ambos.



Sólo estilo por procedimientos: Un conjunto de identificadores de resultados devuelto por mysqli_query(), mysqli_store_result() o mysqli_use_result().


Este parámetro opcional define mediante una constante qué tipo de array debe producirse a partir de los datos actuales. Los valores posibles para este parámetro son las constantes MYSQLI_ASSOC, MYSQLI_NUM, o MYSQLI_BOTH.

Valores devueltos

Devuelve un array asociativo o numérico que almacena el resultado.

MySQL Native Driver Only

Disponible sólo con mysqlnd.

Dado que mysqli_fetch_all() devuelve todas las filas en un array en un solo paso, puede consumir más memoria que otras funciones similares tales como mysqli_fetch_array(), que sólo devuelve una fila cada vez a partir del resultado. Por tanto, si se necesita recorrer un resultado, será necesario un bucle que minimice el impacto en rendimiento. Por esta razón, se aconseja que sólo se use mysqli_fetch_all() en aquellas situaciones en que el resultado se tenga que enviar a otra capa o nivel para que lo procese.

Ver también

add a note add a note

User Contributed Notes 5 notes

jcastro at eftec dot cl
4 months ago
I tested using "fetch all" versus "while / fetch array" and :

fetch-all uses less memory (but not for so much).

In my case (test1 and test2): 147008,262848 bytes (fetch-all) versus 147112,262888 bytes (fetch-array & while.

So, about the memory, in both cases are the same.

However, about the performance
My test takes :350ms (worst case) using fetch-all, while it takes 464ms (worst case) using fetch-array, or about 35% worst using fetch array and a while cycle.

So, using fetch-all, for a normal code that returns a moderate amount of information is :
a) cleaner (a single line of code)
b) uses less memory (about 0.01% less)
c) faster.

php 5.6 32bits, windows 8.1 64bits
m dot amiot at otak-arts dot com
3 years ago
If you really need this function, you can just extend the mysqli_result class with a function like this one.

public function fetch_all($resulttype = MYSQLI_NUM)
            if (
method_exists('mysqli_result', 'fetch_all')) # Compatibility layer with PHP < 5.3
$res = parent::fetch_all($resulttype);
                for (
$res = array(); $tmp = $this->fetch_array($resulttype);) $res[] = $tmp;

andrey at php dot net
4 years ago
Return value changed in 5.3.3 - between 5.3.0 and 5.3.2 (incl.) when the result set was empty NULL was returned. 5.3.3+ returns an empty array.
Also, mysqli_fetch_all works only for buffered result sets, which are the default for mysqli_query. MYSQLI_USE_RESULT will be supported in 5.3.4+
However, it makes little sense to use it this way, materialising unbuffered sets. In this case choose STORE_RESULT, and fetch_all won't copy the data, but reference it, as it is stored already in mysqlnd.
kevin at metalaxe dot com
6 years ago
If you are getting the following error:

Fatal error: Call to undefined method mysqli_result::fetch_all()

Be sure you didn't miss this line after the procedural call about it requiring mysqlnd
windix at gmail dot com
4 years ago
If you get an empty set after calling fetch_all(), make sure the result set cursor is reset to the beginning
To Top