PHP 8.0.6 Released!



(PHP 5 >= 5.3.0, PHP 7)

mysqli_result::fetch_all -- mysqli_fetch_allВыбирает все строки из результирующего набора и помещает их в ассоциативный массив, обычный массив или в оба


Объектно-ориентированный стиль

public mysqli_result::fetch_all ( int $mode = MYSQLI_NUM ) : array

Процедурный стиль

mysqli_fetch_all ( mysqli_result $result , int $mode = MYSQLI_NUM ) : array

Возвращает двумерный массив всех строк результатов в виде ассоциативного массива, числового массива или обоих.

Список параметров


Только для процедурного стиля: Идентификатор результата запроса, полученный с помощью mysqli_query(), mysqli_store_result() или mysqli_use_result() или mysqli_stmt_get_result().


Этот необязательный параметр принимает значение константы, которая указывает на тип массива, в который требуется поместить данные. Возможные значения параметра: MYSQLI_ASSOC, MYSQLI_NUM или MYSQLI_BOTH.

Возвращаемые значения

Возвращает массив содержащий ассоциативные или обычные массивы с данными результирующей таблицы.

Только для MySQL Native Driver

Доступно только с расширением mysqlnd.


Пример #1 Пример использования mysqli_result::fetch_all()

Объектно-ориентированный стиль


$mysqli = new mysqli("localhost""my_user""my_password""world");

$result $mysqli->query("SELECT Name, CountryCode FROM City ORDER BY ID LIMIT 3");

$rows $result->fetch_all(MYSQLI_ASSOC);
foreach (
$rows as $row) {
printf("%s (%s)\n"$row["Name"], $row["CountryCode"]);

Процедурный стиль


$mysqli mysqli_connect("localhost""my_user""my_password""world");

$result mysqli_query($mysqli"SELECT Name, CountryCode FROM City ORDER BY ID LIMIT 3");

$rows mysqli_fetch_all($resultMYSQLI_ASSOC);
foreach (
$rows as $row) {
printf("%s (%s)\n"$row["Name"], $row["CountryCode"]);

Результат выполнения данных примеров:

Kabul (AFG)
Qandahar (AFG)
Herat (AFG)

Смотрите также

  • mysqli_fetch_array() - Выбирает одну строку из результирующего набора и помещает её в ассоциативный массив, обычный массив или в оба
  • mysqli_query() - Выполняет запрос к базе данных

add a note add a note

User Contributed Notes 4 notes

jcastro at eftec dot cl
6 years 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
mail2magvay at rambler dot ru
1 year ago
By the way, this case pretty work's too:

$services = $mysqli->query("SELECT * FROM table1");

if($services && $services->num_rows>0){

foreach($services as $service){
    echo $service; //work properly, cause it implements Iterator 

That's mean in this case $services is a valid array (or empty array)
m dot amiot at otak-arts dot com
9 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
10 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.
To Top