當前位置: 首頁> 最新文章列表> mysql_fetch_array 與mysql_fetch_row 的區別與應用

mysql_fetch_array 與mysql_fetch_row 的區別與應用

gitbox 2025-06-03

在使用PHP 連接MySQL 數據庫時,獲取查詢結果的方式多種多樣,其中mysql_fetch_arraymysql_fetch_row是兩個常用的函數。它們都能從查詢結果中獲取一行數據,但返回的數據結構和適用場景有所不同。本文將詳細講解這兩個函數的區別及它們各自的應用場景。


1. 函數簡介

  • mysql_fetch_array()

    該函數從結果集中取得一行作為關聯數組、數字索引數組,或者二者兼有的數組返回。它的默認行為是返回包含數字索引和關聯索引的數組。

    語法示例:

     $row = mysql_fetch_array($result, MYSQL_BOTH);
    

    第二個參數可以是:

    • MYSQL_ASSOC :只返回關聯數組

    • MYSQL_NUM :只返回數字索引數組

    • MYSQL_BOTH (默認):同時返回關聯和數字索引數組

  • mysql_fetch_row()

    該函數從結果集中取得一行作為數字索引數組返回。也就是說,結果只能通過數字索引訪問,不能用字段名訪問。

    語法示例:

     $row = mysql_fetch_row($result);
    

2. 主要區別

特性mysql_fetch_array mysql_fetch_row
返回值類型默認返回數字索引+關聯索引的數組(可選)返回數字索引數組
訪問方式可用字段名或數字索引訪問只能用數字索引訪問
內存消耗較大(因返回數組包含兩種索引)較小
靈活性高,適合需要同時用數字索引和關聯索引的場景低,只適合數字索引訪問

3. 應用場景分析

mysql_fetch_array

適合於需要靈活訪問字段的場景,例如:

  • 需要通過字段名訪問數據,代碼更具可讀性

  • 需要同時支持數字索引和字段名索引,兼容性更好

  • 讀取數據量較少,對內存佔用要求不高

示例:

 $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>";
}

mysql_fetch_row

適合於對內存要求嚴格,且只需數字索引訪問的場景,例如:

  • 批量讀取大數據,節省內存空間

  • 只按順序處理字段數據,無需通過字段名訪問

  • 性能要求較高的簡單數據處理

示例:

 $result = mysql_query("SELECT id, name FROM users");
while ($row = mysql_fetch_row($result)) {
    echo "User ID: " . $row[0] . ", Name: " . $row[1] . "<br>";
}

4. 小結

函數優點缺點
mysql_fetch_array訪問靈活,代碼可讀性好佔用內存較多
mysql_fetch_row內存佔用少,性能較好只能數字索引訪問,代碼可讀性較差

5. 代碼示例總結

// 使用 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>";
}

6. 注意事項

  • mysql_*系列函數已被廢棄,建議使用mysqliPDO擴展替代。

  • 在新項目中應避免使用這些過時函數,保證代碼的安全性和可維護性。