PHPでMySQLIを使用してデータベースクエリを実行した後、通常、すべてのクエリ結果を効率的かつ便利に取得する必要があります。オブジェクト指向のmysqliの使用法では、 mysqli_result :: fetch_allは、すべての結果を一度に取得して配列として返すための非常に簡潔な方法です。この記事では、 fetch_allメソッドの使用方法を詳細に紹介し、その使用シナリオと予防策を分析します。
mysqli_result :: fetch_allは、 Mysqli_Resultクラスのメソッドであり、一度に設定されたクエリ結果のすべての行を取得するために使用されます。 2次元配列を返し、各行はクエリ結果のレコードを表します。
構文は次のとおりです。
<span><span><span class="hljs-keyword">array</span></span><span> mysqli_result::</span><span><span class="hljs-title function_ invoke__">fetch_all</span></span><span>(</span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$mode</span></span><span> = MYSQLI_NUM)
</span></span>
$モードパラメーターは、返品配列の形式を定義するために使用されます。一般的に使用されるものは次のとおりです。
mysqli_num :数値インデックスアレイを返します。
mysqli_assoc :連想インデックスアレイ(キーとしてフィールド名)を返します。
mysqli_both :数字と関連するインデックスの両方を返します。
以下に、完全な例を介してfetch_allの使用を示します。
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// データベース接続構成</span></span><span>
</span><span><span class="hljs-variable">$host</span></span><span> = </span><span><span class="hljs-string">"localhost"</span></span><span>;
</span><span><span class="hljs-variable">$user</span></span><span> = </span><span><span class="hljs-string">"root"</span></span><span>;
</span><span><span class="hljs-variable">$password</span></span><span> = </span><span><span class="hljs-string">""</span></span><span>;
</span><span><span class="hljs-variable">$database</span></span><span> = </span><span><span class="hljs-string">"test_db"</span></span><span>;
</span><span><span class="hljs-comment">// 接続を作成します</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-variable">$host</span></span><span>, </span><span><span class="hljs-variable">$user</span></span><span>, </span><span><span class="hljs-variable">$password</span></span><span>, </span><span><span class="hljs-variable">$database</span></span><span>);
</span><span><span class="hljs-comment">// 接続が成功しているかどうかを確認してください</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_error) {
</span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"接続に失敗しました: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_error);
}
</span><span><span class="hljs-comment">// クエリステートメント</span></span><span>
</span><span><span class="hljs-variable">$sql</span></span><span> = </span><span><span class="hljs-string">"SELECT id, name, email FROM users"</span></span><span>;
</span><span><span class="hljs-comment">// クエリを実行します</span></span><span>
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-variable">$sql</span></span><span>);
</span><span><span class="hljs-comment">// クエリが成功したかどうかを確認してください</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"クエリに失敗しました: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->error);
}
</span><span><span class="hljs-comment">// 使用 fetch_all すべての結果を取得します(連想配列法)</span></span><span>
</span><span><span class="hljs-variable">$data</span></span><span> = </span><span><span class="hljs-variable">$result</span></span><span>-></span><span><span class="hljs-title function_ invoke__">fetch_all</span></span><span>(MYSQLI_ASSOC);
</span><span><span class="hljs-comment">// 出力結果</span></span><span>
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$data</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$row</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"ID: "</span></span><span> . </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-string">'id'</span></span><span>] . </span><span><span class="hljs-string">"<br>"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Name: "</span></span><span> . </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-string">'name'</span></span><span>] . </span><span><span class="hljs-string">"<br>"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Email: "</span></span><span> . </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-string">'email'</span></span><span>] . </span><span><span class="hljs-string">"<br><br>"</span></span><span>;
}
</span><span><span class="hljs-comment">// 結果セットをリリースします</span></span><span>
</span><span><span class="hljs-variable">$result</span></span><span>-></span><span><span class="hljs-title function_ invoke__">free</span></span><span>();
</span><span><span class="hljs-comment">// 接続を閉じます</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
簡潔: while($ row = $ result-> fetch_assoc())の従来の執筆方法と比較して、コードが少なく、より明確です。
効率:小規模から中規模のデータセットの処理に適したすべてのデータを一度にメモリにロードします。
柔軟性:複数の配列形式(数値インデックス、関連インデックス、またはその両方)をサポートします。
データボリュームが大きい場合は注意してください。FETCH_ALLはすべてのデータを一度にメモリにロードし、データボリュームが大きすぎるとメモリオーバーフローが発生する可能性があるためです。
MySQLネイティブドライバー(MYSQLND)要件: FETCH_ALLメソッドにはMySQLND(MySQLネイティブドライバー)が必要です。一部の古いPHP構成では、mysqlndが有効になっていない場合、この方法は利用できない場合があります。
エラー処理:SQL実行エラーが時間内にキャッチできるように、クエリの結果が偽であるかどうかを常に確認することをお勧めします。
mysqli_result :: fetch_allを使用すると、PHP開発者はデータベースから完全なクエリ結果をより効率的に取得できます。この方法はシンプルで便利ですが、使用中の実際のデータボリュームとシステムリソースに基づいて合理的な選択を行う必要があります。その使用シナリオをマスターすると、データベースの操作とコードの読みやすさの効率を改善するのに役立ちます。