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
$res = parent::fetch_all($resulttype);
else
for ($res = array(); $tmp = $this->fetch_array($resulttype);) $res[] = $tmp;
return $res;
}
?>
mysqli_result::fetch_all
mysqli_fetch_all
(PHP 5 >= 5.3.0)
mysqli_result::fetch_all -- mysqli_fetch_all — 結果のすべての行を連想配列・数値添字配列あるいはその両方の形式で取得する
説明
オブジェクト指向型
手続き型
mysqli_fetch_all() は、 すべての結果の行を取得してその結果セットを連想配列・数値添字配列あるいはその両方で返します。
パラメータ
-
result -
手続き型のみ: mysqli_query()、 mysqli_store_result() あるいは mysqli_use_result() が返す結果セット ID。
-
resulttype -
このオプションは、 結果の行データから返す配列の型を指定します。ここで指定可能な値は 定数
MYSQLI_ASSOC、MYSQLI_NUMあるいはMYSQLI_BOTH. のいずれかです。
返り値
結果の行を含む連想配列あるいは数値添字配列の配列を返します。
MySQL ネイティブドライバ限定
mysqlnd でのみ使用可能です。
mysqli_fetch_all() は、すべての行を配列にまとめて一括で返します。 そのため、 mysqli_fetch_array() のように結果セットから一行ずつ返す同等の関数に比べるとメモリの消費量が多くなる可能性があります。 また、結果セットを順に処理していく際にはループ構造が必要となり、 さらにパフォーマンスに影響を及ぼすでしょう。これらを考慮すると、 mysqli_fetch_all() を使うのは 結果セットを別のレイヤーに渡して処理させるなどの特別な場合に限定しなければなりません。
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
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.
If you get an empty set after calling fetch_all(), make sure the result set cursor is reset to the beginning
