首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

mysql_fetch_array 與 mysql_fetch_row 差異深度解析

     編輯:MySQL 資料庫相關知識

核心差異一覽

兩者皆用於從結果集逐行取得資料,核心差異在於陣列索引方式:

函數索引類型記憶體佔用適用場景
mysql_fetch_row()數字索引(0 起始)較低僅需順序存取欄位、效能敏感場合
mysql_fetch_array()數字 + 關聯索引(欄位名)較高(約雙倍)需以欄位名存取、程式碼可讀性優先

語法與回傳值

// 僅數字索引
$row = mysql_fetch_row($result);
// $row[0], $row[1]... 對應欄位順序

// 數字 + 關聯索引(預設 MYSQL_BOTH)
$row = mysql_fetch_array($result);
// $row[0] / $row['field_name'] 均可存取

// 可指定模式:MYSQL_NUM、MYSQL_ASSOC、MYSQL_BOTH
$row = mysql_fetch_array($result, MYSQL_ASSOC);

回傳值:成功時回傳陣列,無更多行時回傳 false。

實務程式碼範例

mysql_fetch_row 範例

$result = mysql_query("SELECT id, name, email FROM users");
while ($row = mysql_fetch_row($result)) {
    echo "ID: {$row[0]}, Name: {$row[1]}, Email: {$row[2]}
"; }

mysql_fetch_array 範例(推薦 MYSQL_ASSOC 節省記憶體)

$result = mysql_query("SELECT id, name, email FROM users");
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    echo "ID: {$row['id']}, Name: {$row['name']}, Email: {$row['email']}
"; }

效能與最佳實踐建議

  • 大量資料處理:優先使用 mysql_fetch_row() 或 mysql_fetch_array($result, MYSQL_NUM) 減少記憶體壓力。
  • 程式碼維護性:使用 MYSQL_ASSOC 以欄位名存取,Schema 變更時較不易出錯。
  • 避免預設 MYSQL_BOTH:除非確實需要雙重索引,否則會浪費記憶體建立重複鍵值。
  • 重要提醒:mysql_* 函數已於 PHP 7.0 移除,新專案請改用 mysqli 或 PDO,對應方法為 fetch_row()、fetch_array()、fetch_assoc()。

常見輔助函數速查

  • mysql_num_rows():取得結果集總行數
  • mysql_insert_id():取得最後 INSERT 的自增 ID
  • mysql_error():取得最後一次錯誤訊息
  • mysql_close():關閉資料庫連線

編碼問題快速修正

查詢前執行 mysql_query("SET NAMES 'GBK'") 或 SET NAMES 'utf8' 可解決中文亂碼,建議在連線建立後立即執行。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved