web-dev-qa-db-ja.com

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

whileループで_PHP 5.2.17_-_fetch_assoc_を使用しているため、fetch_all()を使用できないことがわかりました。


私が_fetch_all_を使用している関数は、このエラーで戻ってきています:

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

_$mysqli = new mysqli($Host, $username, $password, $database);
$query = "LONG QUERY that works, tested in phpmyadmin"
$result = $mysqli->query($query);
$result->fetch_all(); or  $mysqli->fetch_all() tried both
mysqli_fetch_all() was already tried.
$mysqli->close(); 
_

DBに接続でき、単一の行をプルしました。 PHPMYADMINにクエリを配置すると、5行が返されます。

この機能は機能しますか?自分でデータを連想配列に配置する方法はありますか?

44
Phil

この関数はPHP 5.3.0。おそらくバージョンが古い可能性があります。代わりにfetch_assoc()を使用してください。

while ($row = $result->fetch_assoc()) {
    // do what you need.
}
48
Karolis

mysqli::fetch_all()を使用するには、mysqlndドライバーをインストールする必要があります。

33
Hassan Azimi

連想配列を作成する一般的な方法は、whileループです。

$results_array = array();
$result = $mysqli->query($query);
while ($row = $result->fetch_assoc()) {
  $results_array[] = $row;
}
17

Fetch_all()の使用には注意してください:

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

Mysqldn要件に関する注意をお読みください。

9

Fabriziosの回答に加えて、ループを使用してアレイを構築することを検討してください。

$array = array();
while($row = $result->fetch_assoc())
    $array[] = $row;
7
Sascha Galley

5.6はありましたが、とにかくうまくいきませんでした。 mysqlndドライバーを有効にすることで、私にとってはうまくいきました。書くだけ apt-get install php5-mysqlndその後、phpを再起動すると、準備完了です。

2
Coco

問題は「mysqli」と「mysqlnd」が一緒に機能していないようです。私はcpanelで同じ問題を抱えていました-次の答えが見つかりました こちら 助けてくれました。

手順:

1)CPanelダッシュボードに移動

2)[選択PHPバージョン]に移動します。多数のチェックボックスが表示されます。

3)PHPバージョン(5.4以降)を設定

4)「mysqli」拡張子のチェックを外し、「mysqlind」と「nd_mysqli」の両方をチェックします

どうやら「nd_mysqli」は「mysqli」ですが、「mysqlind」で動作するように設定されており、設定の競合のために「mysqli」のチェックを外す必要があります。

2
javatar

Karolis 'の答えを使用して反復したくない場合は、

_     while($row = mysqli_fetch_array($result,MYSQLI_ASSOC))
    {
       $rows[] = $row;
    }
_

と同じ結果を達成するために

_$rows = mysqli_fetch_all($result, MYSQLI_ASSOC);
_

定数を_MYSQLI_NUM_または_MYSQLI_BOTH_に変更できます。このオプションのパラメーターは、現在の行データから生成される配列のタイプを示す定数です。

mysqli_fetch_array($result,MYSQLI_ASSOC )mysqli_fetch_assoc()関数と同じ動作をし、mysqli_fetch_array($result,MYSQLI_NUM)mysqli_fetch_row()関数と同じ動作をすることに注意してください。最後のオプション_MYSQLI_BOTH_は、両方の属性を持つ単一の配列を作成します。 http://php.net/manual/en/mysqli-result.fetch-array.php


編集済み
ありがとうございますあなたの常識修正。

2
Wilson

mysqlndドライバーに関する追加のメモを追加するには、mysqli AP​​I拡張機能をインストールする必要があります。拡張機能がないと、fetch_all()はまだ使用できません。これは、コードが1つのサーバーで機能し、別のサーバーでは機能しない理由をトラブルシューティングしているときに発見されました。両方ともPHP> 5.3です。 phpinfo()を使用して、インストールされている拡張機能を確認します。

0
Chris Langtiw

PHP致命的エラー:未定義関数mysqli_fetch_all()の呼び出し

$rows = mysqli_fetch_all($result, MYSQLI_ASSOC);//not work

変更先:php 5.3または

$query = "SELECT * FROM `user_counter` ORDER BY id DESC LIMIT 20";
$result =  mysqli_query($connection, $query) or die
("Error in Selecting " . mysqli_error($connection));
$rows = array();
while ($row = $result->fetch_assoc()) {
    $rows[] = $row;
}
echo json_encode($rows);
0
sirmagid
function runQuery($query) {
        $result = mysqli_query($this->conn,$query);
                $resultset  = array(); //you need to define array
                         while($row=$result->fetch_assoc()) {
                              $resultset[] = $row; //then insert result into the array
            }       
            if(!empty($resultset))
            {

            return $resultset;}
            else{return 'empty';};
    }
0
Ricky Harerri