:現在の行のすべてのフィールドデータを返し、結果は数値インデックスアレイで、各値は列のコンテンツです。配列の添え字は0から始まり、クエリ結果セットの列インデックスを表します。
mysql_fetch_assoc() :現在の行のすべてのフィールドデータを返し、結果は連想配列であり、配列のキーは列名、値は列のコンテンツです。 mysql_fetch_row()とは異なり、 mysql_fetch_assoc()は、数値インデックスの代わりに列名を使用してフィールドを識別します。
mysql_fetch_row()例:
<span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysql_query</span></span><span>(</span><span><span class="hljs-string">"SELECT id, name, age FROM users"</span></span><span>);
</span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysql_fetch_row</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-number">0</span></span><span>]; </span><span><span class="hljs-comment">// 出力 id</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-number">1</span></span><span>]; </span><span><span class="hljs-comment">// 出力 name</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-number">2</span></span><span>]; </span><span><span class="hljs-comment">// 出力 age</span></span><span>
</span></span>
この例では、 mysql_fetch_row()は数値インデックスの配列を返し、配列のサブスクリプトは列のインデックスです(0、1、2 ...)。列データにアクセスする場合は、列のインデックスを介してアクセスします。
mysql_fetch_assoc()例:
<span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysql_query</span></span><span>(</span><span><span class="hljs-string">"SELECT id, name, age FROM users"</span></span><span>);
</span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysql_fetch_assoc</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span><span><span class="hljs-keyword">echo</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-comment">// 出力 id</span></span><span>
</span><span><span class="hljs-keyword">echo</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-comment">// 出力 name</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-string">'age'</span></span><span>]; </span><span><span class="hljs-comment">// 出力 age</span></span><span>
</span></span>
mysql_fetch_row()とは異なり、 mysql_fetch_assoc()は連想配列を返し、配列のキーは列名です。列名を介してデータにアクセスできます。これにより、コードの理解と維持が容易になります。
パフォーマンスの観点から見ると、 mysql_fetch_row()はmysql_fetch_assoc()よりもわずかに優れています。数値インデックスアレイを返すため、 mysql_fetch_assoc()は、列名の文字列マッピングを処理する必要があり、オーバーヘッドが少し追加されます。したがって、極端なパフォーマンス要件では、 mysql_fetch_row()がより適切かもしれません。
ただし、ほとんどの場合、特に違いが認められないほとんどのアプリケーションでは、パフォーマンスの違いは重要ではありません。
mysql_fetch_row()のパフォーマンスはわずかな利点がありますが、 mysql_fetch_assoc()はより良いコード読みやすさを提供します。数値インデックスの代わりに列名を使用することにより、アクセスエラーを回避でき、コードがより保守可能になります。
たとえば、クエリの結果列が変更された場合(列の順序調整など)、 mysql_fetch_assoc()を使用すると、列名が列の順序の変更によって影響を受けるため、より堅牢に見えます。 MySQL_FETCH_ROW()が数値インデックスに依存している場合、不必要なエラーが発生する可能性があります。
mysql_fetch_row()を使用したシナリオ:
パフォーマンスの要件が非常に高く、クエリの結果の列の数は非常に大きいため、メモリのオーバーヘッドを最小限に抑えたい場合。
クエリ内の列の数が修正され、変更が容易ではなく、コード開発者が列インデックスを明確に理解している場合。
mysql_fetch_assoc()を使用したシナリオ:
特に列の順序が変更される可能性がある場合、コードを読みやすく維持しやすくする場合。
列名の順序または位置の変更によって引き起こされるエラーを回避するために、列名を使用してデータにアクセスする必要があります。
クエリ結果セットに列が少なく、パフォーマンスの違いが明らかではない場合。
mysql_fetch_row()およびmysql_fetch_assoc()はどちらもMySQLクエリ結果セットでデータの行を抽出するために使用されますが、リターンの形式、パフォーマンス、読みやすさは異なります。使用するものを選択するときは、特定のアプリケーションシナリオに基づいて決定する必要があります。
パフォーマンスが優先され、データ構造が比較的単純な場合、 MySQL_FETCH_ROW()を使用することが適切な選択です。
特に複数の列が関与し、列名が変更される場合がある場合、コードの読みやすさと保守性にもっと注意を払うと、 mysql_fetch_assoc()を使用する方が便利です。
最新のPHP開発では、 MySQL拡張機能が非推奨であるため、 MySQL拡張機能の代わりにMySQLIまたはPDOを使用することをお勧めします。どの拡張機能を使用しても、これら2つの機能の違いを理解することで、データベース操作をより効率的に実行することができます。