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行が返されます。
この機能は機能しますか?自分でデータを連想配列に配置する方法はありますか?
この関数はPHP 5.3.0。おそらくバージョンが古い可能性があります。代わりにfetch_assoc()
を使用してください。
while ($row = $result->fetch_assoc()) {
// do what you need.
}
mysqli::fetch_all()
を使用するには、mysqlnd
ドライバーをインストールする必要があります。
連想配列を作成する一般的な方法は、while
ループです。
$results_array = array();
$result = $mysqli->query($query);
while ($row = $result->fetch_assoc()) {
$results_array[] = $row;
}
Fetch_all()の使用には注意してください:
http://www.php.net/manual/en/mysqli-result.fetch-all.php#88031
Mysqldn要件に関する注意をお読みください。
Fabriziosの回答に加えて、ループを使用してアレイを構築することを検討してください。
$array = array();
while($row = $result->fetch_assoc())
$array[] = $row;
5.6はありましたが、とにかくうまくいきませんでした。 mysqlndドライバーを有効にすることで、私にとってはうまくいきました。書くだけ apt-get install php5-mysqlnd
その後、phpを再起動すると、準備完了です。
問題は「mysqli」と「mysqlnd」が一緒に機能していないようです。私はcpanelで同じ問題を抱えていました-次の答えが見つかりました こちら 助けてくれました。
手順:
1)CPanelダッシュボードに移動
2)[選択PHPバージョン]に移動します。多数のチェックボックスが表示されます。
3)PHPバージョン(5.4以降)を設定
4)「mysqli」拡張子のチェックを外し、「mysqlind」と「nd_mysqli」の両方をチェックします
どうやら「nd_mysqli」は「mysqli」ですが、「mysqlind」で動作するように設定されており、設定の競合のために「mysqli」のチェックを外す必要があります。
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
編集済み
ありがとうございますあなたの常識修正。
mysqlnd
ドライバーに関する追加のメモを追加するには、mysqli
API拡張機能をインストールする必要があります。拡張機能がないと、fetch_all()
はまだ使用できません。これは、コードが1つのサーバーで機能し、別のサーバーでは機能しない理由をトラブルシューティングしているときに発見されました。両方ともPHP> 5.3です。 phpinfo()
を使用して、インストールされている拡張機能を確認します。
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);
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';};
}