現在の位置: ホーム> 最新記事一覧> mysql_fetch_fieldとmysql_fetch_assocの違いは何ですか?あなたのニーズに応じて関数を選択する方法をあなたに教える

mysql_fetch_fieldとmysql_fetch_assocの違いは何ですか?あなたのニーズに応じて関数を選択する方法をあなたに教える

gitbox 2025-08-26

1。概念の違い(1つの文の概要)

  • mysql_fetch_assoc() :(キー名はフィールド名、値は行の対応するフィールドの値です)。多くの場合、クエリ結果のデータの各行を通過するために使用されます。

  • mysql_fetch_field()結果セットからフィールド(列)メタ情報(フィールド名、タイプ、長さなどなど)を取得し、行データではなく列構造情報を取得するために使用されます。


2。典型的な使用比較

  • mysql_fetch_assoc()は、ユーザーリストの表示や各レコードの処理など、クエリによって返されるデータ行の読み取りに使用されます。

  • MySQL_FETCH_FIELD()は、テーブルヘッダーを動的に生成したり、フォームを自動的に生成したり、列の種類または長さをチェックするなど、クエリ結果セットのフィールド定義を読み取るために使用されます。


3。例( MySQL拡張機能、目的を説明する - デモンストレーションのみ、それは非推奨であることに注意してください)

 <span><span><span class="hljs-comment">// すでにあると仮定します $link = mysql_connect(...); mysql_select_db(...);</span></span><span>

</span><span><span class="hljs-comment">// クエリデータ</span></span><span>
</span><span><span class="hljs-variable">$res</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysql_query</span></span><span>(</span><span><span class="hljs-string">"SELECT id, username, email FROM users"</span></span><span>);

</span><span><span class="hljs-comment">// 使用 mysql_fetch_assoc() 各行を反復します</span></span><span>
</span><span><span class="hljs-keyword">while</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">$res</span></span><span>)) {
    </span><span><span class="hljs-comment">// $row それは連想配リストです: ['id' =&gt; '1', 'username' =&gt; 'alice', 'email' =&gt; '[email protected]']</span></span><span>
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"ID: <span class="hljs-subst">{$row['id']}</span></span></span><span>, ユーザー名: </span><span><span class="hljs-subst">{$row['username']}</span></span><span>\n";
}

</span><span><span class="hljs-comment">// フィールド情報を取得します(例えば2リスト情報)</span></span><span>
</span><span><span class="hljs-title function_ invoke__">mysql_data_seek</span></span><span>(</span><span><span class="hljs-variable">$res</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>); </span><span><span class="hljs-comment">// オプション:ポインターの配置(mysql_fetch_field ラインポインターを変更しないでください,しかし、それは使用習慣に関係しています)</span></span><span>
</span><span><span class="hljs-variable">$field</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysql_fetch_field</span></span><span>(</span><span><span class="hljs-variable">$res</span></span><span>, </span><span><span class="hljs-number">1</span></span><span>); </span><span><span class="hljs-comment">// パラメーター 1 を示します 2 リスト(からのインデックス 0 始める)</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$field</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"第2リスト名: <span class="hljs-subst">{$field-&gt;name}</span></span></span><span>, タイプ: </span><span><span class="hljs-subst">{$field-&gt;type}</span></span><span>, 長さ: </span><span><span class="hljs-subst">{$field-&gt;max_length}</span></span><span>\n";
}
</span></span>

説明:

  • mysql_fetch_assoc()行データにアクセスするための配列を返します。

  • mysql_fetch_field()列のメタ情報を含むオブジェクト(またはfalse )を返します(name、orgname、max_length、typeなど)。


4.一般的な誤解

  • 私は誤って、 mysql_fetch_field()が特定の行のフィールド値を返すと思いました -いいえフィールドの構造/メタ情報を返します。値を取得するには、 mysql_fetch_assoc() / mysql_fetch_row()などを使用してください。

  • mysql_fetch_assoc()は、フィールドのタイプまたは長さを取得できると考えられています -いいえ、値(およびキーとしてのフィールド名)のみを提供します。


5。提案を選択します(いつ使用するか)

  • クエリの結果を反復し、データを処理する必要があります。MySQL_FETCH_ASSOC またはより最新のmysqli_fetch_assoc() / pdoのfetch(pdo :: fetch_assoc) )を使用します。

  • テーブルヘッダーを動的に生成したり、列タイプを確認するか、列名/長さやその他のメタ情報を読み取ります。MySQL_FETCH_FIELD () (またはmysqli_fetch_field_direct()$ result-> fetch_field() 、pdo getColumnmeta( )()

  • 目標がセキュリティ、パフォーマンス、長期のメンテナンスを考慮することである場合は、できるだけ早くMySQLIまたはPDOに移行してください。 MySQL拡張はPHP 7+で削除されました。


6.推奨される現代の代替品( MySQLIPDOの例)

mysqli(プロセス指向)

 <span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysqli_connect</span></span><span>(</span><span><span class="hljs-string">'host'</span></span><span>,</span><span><span class="hljs-string">'user'</span></span><span>,</span><span><span class="hljs-string">'pass'</span></span><span>,</span><span><span class="hljs-string">'db'</span></span><span>);
</span><span><span class="hljs-variable">$res</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysqli_query</span></span><span>(</span><span><span class="hljs-variable">$mysqli</span></span><span>, </span><span><span class="hljs-string">"SELECT id, username, email FROM users"</span></span><span>);

</span><span><span class="hljs-comment">// 行データを取得します(連想配列)</span></span><span>
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysqli_fetch_assoc</span></span><span>(</span><span><span class="hljs-variable">$res</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">'username'</span></span><span>] . </span><span><span class="hljs-string">"\n"</span></span><span>;
}

</span><span><span class="hljs-comment">// フィールド情報を取得します(第 1 リスト)</span></span><span>
</span><span><span class="hljs-variable">$fieldInfo</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysqli_fetch_field_direct</span></span><span>(</span><span><span class="hljs-variable">$res</span></span><span>, </span><span><span class="hljs-number">1</span></span><span>); </span><span><span class="hljs-comment">// または mysqli_fetch_field($res) フィールドを横断するとき</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$fieldInfo</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$fieldInfo</span></span><span>-&gt;name . </span><span><span class="hljs-string">' / '</span></span><span> . </span><span><span class="hljs-variable">$fieldInfo</span></span><span>-&gt;type . </span><span><span class="hljs-string">"\n"</span></span><span>;
}
</span></span>

PDO

 <span><span><span class="hljs-variable">$pdo</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">PDO</span></span><span>(</span><span><span class="hljs-string">'mysql:host=host;dbname=db;charset=utf8mb4'</span></span><span>, </span><span><span class="hljs-string">'user'</span></span><span>, </span><span><span class="hljs-string">'pass'</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$pdo</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">"SELECT id, username, email FROM users"</span></span><span>);

</span><span><span class="hljs-comment">// 行データを取得します</span></span><span>
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">fetch</span></span><span>(PDO::</span><span><span class="hljs-variable constant_">FETCH_ASSOC</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">'email'</span></span><span>] . </span><span><span class="hljs-string">"\n"</span></span><span>;
}

</span><span><span class="hljs-comment">// フィールド要素情報を取得します(知らせ:PDO::getColumnMeta 一部のドライバーで/不安定なバージョン)</span></span><span>
</span><span><span class="hljs-variable">$meta</span></span><span> = </span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">getColumnMeta</span></span><span>(</span><span><span class="hljs-number">1</span></span><span>); </span><span><span class="hljs-comment">// 第 2 リスト</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$meta</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$meta</span></span><span>[</span><span><span class="hljs-string">'name'</span></span><span>] . </span><span><span class="hljs-string">', native_type='</span></span><span> . (</span><span><span class="hljs-variable">$meta</span></span><span>[</span><span><span class="hljs-string">'native_type'</span></span><span>] ?? </span><span><span class="hljs-string">'unknown'</span></span><span>) . </span><span><span class="hljs-string">"\n"</span></span><span>;
}
</span></span>

7。要約(クイックレビュー)

  • mysql_fetch_assoc()return row data (associate array) - 毎日の読み取りレコードに優先される選択肢。

  • mysql_fetch_field()column element Information(object)を返します- 列名、タイプ、長さなどの構造情報を読み取るために使用されます。

  • 実際の開発では、 MySQLIまたはPDOを使用する必要があり、 fetch_assoc() / fetch_field() / getColumnmeta()などの対応する代替機能を使用して同じタスクを完了する必要があります。


8。追加のアドバイス

  • パラメーター化されたクエリ(プレセシングステートメント)を使用して、SQL注入( MySQLI準備/ BIND_PARAM 、またはPDOの準備/ bindValue )を防止してください。

  • 列名のリストだけが必要な場合は、簡単な方法は、最初の行の連想配列を使用し、 Array_Keys()を使用してフィールド名を取得することです(結果セットが空の場合は追加の処理が必要であることに注意してください)。