PHPを使用してMySQLデータベースに接続する場合、クエリ結果を取得するには多くの方法があります。 mysql_fetch_arrayとmysql_fetch_rowは、一般的に使用される2つの関数です。それらはすべて、クエリの結果から一連のデータを取得できますが、返されたデータ構造と適用可能なシナリオは異なります。この記事では、これら2つの機能とそれぞれのアプリケーションシナリオの違いを詳細に説明します。
mysql_fetch_array()
この関数は、結果セットから連想配列、数値インデックスアレイ、または両方を持つ配列として行を取ります。そのデフォルトの動作は、数値インデックスと関連するインデックスを含む配列を返すことです。
構文例:
$row = mysql_fetch_array($result, MYSQL_BOTH);
2番目のパラメーターは次のとおりです。
mysql_assoc :連想配列のみを返します
mysql_num :数値インデックスアレイのみを返します
mysql_both (デフォルト):連想インデックスアレイと数値の両方のインデックスアレイを返します
mysql_fetch_row()
この関数は、結果セットから行を取り、数値インデックスアレイとして返します。つまり、結果は数値インデックスを介してのみアクセスでき、フィールド名でアクセスすることはできません。
構文例:
$row = mysql_fetch_row($result);
特性 | mysql_fetch_array | mysql_fetch_row |
---|---|---|
戻り値タイプ | デフォルトで数値インデックス +関連インデックスを返す配列(オプション) | 数値インデックスアレイを返します |
アクセス方法 | アクセス可能なフィールド名または数値インデックス | デジタルインデックスでのみアクセスします |
メモリ消費 | 大きい(返品配列には2つのインデックスが含まれているため) | 小さい |
柔軟性 | 高度、数値インデックスと関連するインデックスが同時に必要なシナリオに適しています | 低く、デジタルインデックスアクセスにのみ適しています |
たとえば、フィールドへの柔軟なアクセスが必要なシナリオに適しています。
データはフィールド名からアクセスする必要があり、コードはより読みやすいです
数値インデックスとフィールド名インデックスの両方をサポートする必要があります。
データの量が読み取られています、メモリの使用要件は高くありません
例:
$result = mysql_query("SELECT id, name FROM users");
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
echo "User ID: " . $row['id'] . ", Name: " . $row['name'] . "<br>";
}
メモリ要件が厳密に必要であり、次のようなデジタルインデックスによってのみアクセスされるシナリオに適しています。
メモリスペースを保存するために、バッチでビッグデータを読みます
フィールドデータのみを順番に処理し、フィールド名でアクセスする必要はありません
高性能要件を備えた単純なデータ処理
例:
$result = mysql_query("SELECT id, name FROM users");
while ($row = mysql_fetch_row($result)) {
echo "User ID: " . $row[0] . ", Name: " . $row[1] . "<br>";
}
関数 | アドバンテージ | 欠点 |
---|---|---|
mysql_fetch_array | 柔軟なアクセス、優れたコードの読みやすさ | より多くのメモリを取り上げます |
mysql_fetch_row | メモリの使用量が少ない、パフォーマンスの向上 | デジタルインデックスによってのみアクセスされ、コードの読みやすさが不十分です |
// 使用 mysql_fetch_array 連想配列を取得します
$result = mysql_query("SELECT id, username FROM users");
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
echo "ID: " . $row['id'] . ", Username: " . $row['username'] . "<br>";
}
// 使用 mysql_fetch_row 数値インデックスアレイを取得します
$result = mysql_query("SELECT id, username FROM users");
while ($row = mysql_fetch_row($result)) {
echo "ID: " . $row[0] . ", Username: " . $row[1] . "<br>";
}