在使用PHP 連接MySQL 數據庫時,獲取查詢結果的方式多種多樣,其中mysql_fetch_array和mysql_fetch_row是兩個常用的函數。它們都能從查詢結果中獲取一行數據,但返回的數據結構和適用場景有所不同。本文將詳細講解這兩個函數的區別及它們各自的應用場景。
mysql_fetch_array()
該函數從結果集中取得一行作為關聯數組、數字索引數組,或者二者兼有的數組返回。它的默認行為是返回包含數字索引和關聯索引的數組。
語法示例:
$row = mysql_fetch_array($result, MYSQL_BOTH);
第二個參數可以是:
MYSQL_ASSOC :只返回關聯數組
MYSQL_NUM :只返回數字索引數組
MYSQL_BOTH (默認):同時返回關聯和數字索引數組
mysql_fetch_row()
該函數從結果集中取得一行作為數字索引數組返回。也就是說,結果只能通過數字索引訪問,不能用字段名訪問。
語法示例:
$row = mysql_fetch_row($result);
特性 | mysql_fetch_array | mysql_fetch_row |
---|---|---|
返回值類型 | 默認返回數字索引+關聯索引的數組(可選) | 返回數字索引數組 |
訪問方式 | 可用字段名或數字索引訪問 | 只能用數字索引訪問 |
內存消耗 | 較大(因返回數組包含兩種索引) | 較小 |
靈活性 | 高,適合需要同時用數字索引和關聯索引的場景 | 低,只適合數字索引訪問 |
適合於需要靈活訪問字段的場景,例如:
需要通過字段名訪問數據,代碼更具可讀性
需要同時支持數字索引和字段名索引,兼容性更好
讀取數據量較少,對內存佔用要求不高
示例:
$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>";
}
適合於對內存要求嚴格,且只需數字索引訪問的場景,例如:
批量讀取大數據,節省內存空間
只按順序處理字段數據,無需通過字段名訪問
性能要求較高的簡單數據處理
示例:
$result = mysql_query("SELECT id, name FROM users");
while ($row = mysql_fetch_row($result)) {
echo "User ID: " . $row[0] . ", Name: " . $row[1] . "<br>";
}
函數 | 優點 | 缺點 |
---|---|---|
mysql_fetch_array | 訪問靈活,代碼可讀性好 | 佔用內存較多 |
mysql_fetch_row | 內存佔用少,性能較好 | 只能數字索引訪問,代碼可讀性較差 |
// 使用 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>";
}