PHP: mysqli_result::fetch_all - Manual (original) (raw)
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
- mysqli_fetch_array() - Fetch the next row of a result set as an associative, a numeric array, or both
- mysqli_fetch_column() - Fetch a single column from the next row of a result set
- mysqli_query() - Performs a query on the database
Found A Problem?
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
2 years 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 ¶
6 years ago
By the way, this case pretty work's too:
<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi><mi>e</mi><mi>r</mi><mi>v</mi><mi>i</mi><mi>c</mi><mi>e</mi><mi>s</mi><mo>=</mo></mrow><annotation encoding="application/x-tex">services = </annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal" style="margin-right:0.02778em;">ser</span><span class="mord mathnormal" style="margin-right:0.03588em;">v</span><span class="mord mathnormal">i</span><span class="mord mathnormal">ces</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span></span></span></span>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.
<?php
public function fetch_all($resulttype = MYSQLI_NUM)
{
if (method_exists('mysqli_result', 'fetch_all')) # Compatibility layer with PHP < 5.3
<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>r</mi><mi>e</mi><mi>s</mi><mo>=</mo><mi>p</mi><mi>a</mi><mi>r</mi><mi>e</mi><mi>n</mi><mi>t</mi><mo>:</mo><mo>:</mo><mi>f</mi><mi>e</mi><mi>t</mi><mi>c</mi><msub><mi>h</mi><mi>a</mi></msub><mi>l</mi><mi>l</mi><mo stretchy="false">(</mo></mrow><annotation encoding="application/x-tex">res = parent::fetch_all(</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">res</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8095em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">p</span><span class="mord mathnormal">a</span><span class="mord mathnormal">re</span><span class="mord mathnormal">n</span><span class="mord mathnormal">t</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">::</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="mord mathnormal">e</span><span class="mord mathnormal">t</span><span class="mord mathnormal">c</span><span class="mord"><span class="mord mathnormal">h</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">a</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord mathnormal" style="margin-right:0.01968em;">ll</span><span class="mopen">(</span></span></span></span>resulttype);
else
for ($res = array(); <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>t</mi><mi>m</mi><mi>p</mi><mo>=</mo></mrow><annotation encoding="application/x-tex">tmp = </annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8095em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">t</span><span class="mord mathnormal">m</span><span class="mord mathnormal">p</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span></span></span></span>this->fetch_array($resulttype);) <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>r</mi><mi>e</mi><mi>s</mi><mo stretchy="false">[</mo><mo stretchy="false">]</mo><mo>=</mo></mrow><annotation encoding="application/x-tex">res[] = </annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">res</span><span class="mopen">[</span><span class="mclose">]</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span></span></span></span>tmp;
return $res;
}
?>
15 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.