web-dev-qa-db-ja.com

致命的なエラー:未定義のメソッドmysqli_result :: fetch_all()の呼び出し

Ubuntu 10.04でPHPに問題があります。mysqli_result:: fetch_allを使用しようとすると、次のエラーが表示されます。

未定義のメソッドmysqli_result :: fetch_all()の呼び出し

ただし、Windows XPでは機能します。

コード:

$result = $this->dbh->query('SELECT [...] ');
return $result->fetch_all(MYSQLI_ASSOC);

結果を別のレイヤーに送信して処理するため、ループでfetch_assocを使用したくありません。

PHP 5.4.4。とphp -m | grep mysqlが表示されないmysqlndモジュールを使用しています。どのようにインストールできますか?問題になりますか?

20
Stokres

mysqli_result :: fetch_all()にはMySQL Native Driver(mysqlnd)が必要です。

おそらくあなたはそれを見逃しているかもしれません。

この投稿をご覧ください。役立つかもしれません。

mysqli fetch_all()は有効な関数ではありませんか?

37

fetch_allはfetch_array()よりも多くのメモリを消費し、他の有害な副作用があるため、fetch_array/fetch_assocが推奨されます。

PHPドキュメンテーション:

Mysqlndでのみ使用できます。

Mysqli_fetch_all()は単一のステップですべての行を配列として返すため、結果セットから一度に1行のみを返すmysqli_fetch_array()などの類似の関数よりも多くのメモリを消費する場合があります。さらに、結果セットを反復処理する必要がある場合は、パフォーマンスにさらに影響を与えるループ構造が必要になります。これらの理由から、mysqli_fetch_all()は、フェッチされた結果セットが処理のために別のレイヤーに送信される状況でのみ使用する必要があります。

本当に使用したい場合は、mySQLをネイティブドライブ(mysqlnd)と共にインストールする必要があります。インストール例:

./configure --with-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \

Ubuntuでできること

Sudo apt-get install php5-mysqlnd
5
wonton

http://www.php.net/manual/en/mysqli-result.fetch-all.php

Mysqlndでのみ使用できます。

mysqlndの有効化に関する注意: http://www.php.net/manual/en/mysqlnd.install.php

2
Timur