mysql_fetch_assoc() :(鍵名為字段名,值為該行對應字段的值)。常用於遍歷查詢結果的每一行數據。
mysql_fetch_field() :從結果集取得字段(列)元信息(例如字段名、類型、長度等),用於獲取列的結構信息,而不是行數據。
mysql_fetch_assoc()用於:讀取查詢返回的數據行,例如顯示用戶列表、處理每條記錄。
mysql_fetch_field()用於:讀取查詢結果集的字段定義,例如在動態生成表頭、自動生成表單、檢查列類型或長度時使用。
<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' => '1', 'username' => 'alice', 'email' => '[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">// 獲取字段信息(例如1。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 表示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">"1。2列名: <span class="hljs-subst">{$field->name}</span></span></span><span>, 類型: </span><span><span class="hljs-subst">{$field->type}</span></span><span>, 長度: </span><span><span class="hljs-subst">{$field->max_length}</span></span><span>\n";
}
</span></span>
說明:
mysql_fetch_assoc()返回一個數組用於訪問行數據。
mysql_fetch_field()返回一個對象(或false )包含列的元信息(name, orgname, max_length, type 等)。
誤以為mysql_fetch_field()會返回某一行的字段值——不是,它返回字段的結構/元信息。要取值請用mysql_fetch_assoc() / mysql_fetch_row()等。
認為mysql_fetch_assoc()能取得字段的類型或長度——不能,它只提供值(和字段名作為鍵)。
你要遍歷查詢結果並處理數據:用mysql_fetch_assoc() (或更現代的mysqli_fetch_assoc() / PDO 的fetch(PDO::FETCH_ASSOC) )。
你要動態生成表頭、驗證列類型或讀取列名/長度等元信息:用mysql_fetch_field() (或mysqli_fetch_field_direct() 、 $result->fetch_field() 、PDO 的getColumnMeta() (注意兼容性和限制))。
<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。 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>->name . </span><span><span class="hljs-string">' / '</span></span><span> . </span><span><span class="hljs-variable">$fieldInfo</span></span><span>->type . </span><span><span class="hljs-string">"\n"</span></span><span>;
}
</span></span>
<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>-></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>-></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>-></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">// 1。 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>
mysql_fetch_assoc() :返回行數據(關聯數組)—— 日常讀取記錄首選。
mysql_fetch_field() :返回列元信息(對象)—— 用於讀取列名、類型、長度等結構性信息。
實際開發中應使用mysqli或PDO ,並用對應的fetch_assoc() / fetch_field() / getColumnMeta()等替代函數來完成相同的任務。
盡量使用參數化查詢(預處理語句)以防SQL 注入( mysqli的prepare / bind_param ,或PDO 的prepare / bindValue )。
如果只是需要列名列表,一種簡單做法是取第一行的關聯數組並用array_keys()獲取字段名(注意當結果集為空時需額外處理)。