PHP: Hypertext Preprocessor (original) (raw)

mysqli_result::fetch_all

mysqli_fetch_all

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

mysqli_result::fetch_all -- mysqli_fetch_all — Fetch all result rows as an associative array, a numeric array, or both

Description

Object-oriented style

Note:

Prior to PHP 8.1.0, available only withmysqlnd.

Return Values

Returns an array of associative or numeric arrays holding result rows.

Changelog

Version Description
8.1.0 Now also available when linking against libmysqlclient.

Examples

Example #1 mysqli_result::fetch_all() example

Object-oriented style

`<?php

mysqli_report

(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); mysqli=newmysqli("localhost","myuser","mypassword","world");mysqli = new mysqli("localhost", "my_user", "my_password", "world");mysqli=newmysqli("localhost","myuser","mypassword","world");result = mysqli−>query("SELECTName,CountryCodeFROMCityORDERBYIDLIMIT3");mysqli->query("SELECT Name, CountryCode FROM City ORDER BY ID LIMIT 3");mysqli>query("SELECTName,CountryCodeFROMCityORDERBYIDLIMIT3");rows = $result->fetch_all(MYSQLI_ASSOC);
foreach ($rows as $row) {
printf("%s (%s)\n", row["Name"],row["Name"], row["Name"],row["CountryCode"]);
}`

Procedural style

`<?php

mysqli_report

(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); mysqli=mysqliconnect("localhost","myuser","mypassword","world");mysqli = mysqli_connect("localhost", "my_user", "my_password", "world");mysqli=mysqliconnect("localhost","myuser","mypassword","world");result = mysqli_query($mysqli, "SELECT Name, CountryCode FROM City ORDER BY ID LIMIT 3");$rows = mysqli_fetch_all($result, MYSQLI_ASSOC);
foreach ($rows as $row) {
printf("%s (%s)\n", row["Name"],row["Name"], row["Name"],row["CountryCode"]);
}`

The above examples will output:

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

See Also

Found A Problem?

jcastro at eftec dot cl

10 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

`

darek334 at gazeta dot pl

1 year ago

be careful fetch_all(MYSQLI_ASSOC ) returns an array in the form <?php array(0 => array(...row...), 1 => array(...row...) .... ), even if is one row... ?> not compared to fetch_assoc() which returns one array of the result in form: <?php array(...row...) ?>

mail2magvay at rambler dot ru

5 years ago

`By the way, this case pretty work's too: services=services = services=mysqli->query("SELECT * FROM table1");

if($services && $services->num_rows>0){
$services->fetch_all(MYSQLI_ASSOC);
}

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

13 years ago

`If you really need this function, you can just extend the mysqli_result class with a function like this one.

res=parent::fetchall(res = parent::fetch_all(res=parent::fetchall(resulttype); else for ($res = array(); tmp=tmp = tmp=this->fetch_array($resulttype);) res[]=res[] = res[]=tmp; return $res; } ?>

`

andrey at php dot net

14 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.