PHP 早期的 mysql_* 系列函數提供了四種獲取結果集的方式,雖然這些函數已在 PHP 7.0 移除(建議改用 PDO 或 mysqli),但理解其底層差異對維護舊項目、把握數據獲取本質仍有價值。本文逐一拆解並給出性能對比結論。
<?php
$conn = mysql_connect("localhost", "root", "password");
mysql_select_db("test", $conn);
$result = mysql_query("SELECT * FROM users", $conn);
for ($i = 0; $i < 7; $i++) {
echo "用戶ID:" . mysql_result($result, $i, "user_id") . "<br>";
echo "用戶名:" . mysql_result($result, $i, "user_name") . "<br>";
}
?>
特點:可指定行號、列名隨機讀取;但每次調用都內部定位,大數據集效率極低。
<?php
$conn = mysql_connect("localhost", "root", "password");
mysql_select_db("test", $conn);
$result = mysql_query("SELECT * FROM users", $conn);
while ($row = mysql_fetch_row($result)) {
echo "用戶ID:" . $row[0] . "<br>";
echo "用戶名:" . $row[1] . "<br>";
}
?>
特點:返回 0 基數字索引數組,速度最快,但可讀性差,易因列順序變更導致 Bug。
<?php
$conn = mysql_connect("localhost", "root", "password");
mysql_select_db("test", $conn);
$result = mysql_query("SELECT * FROM users", $conn);
while ($row = mysql_fetch_array($result)) {
// 同時支持 $row[0] 和 $row['user_id']
echo "用戶ID:" . $row['user_id'] . "<br>";
echo "用戶名:" . $row['user_name'] . "<br>";
}
?>
特點:默認返回數字+關聯雙索引數組(MYSQL_BOTH),兼顧性能與可讀性,實際開發最常用。
<?php
$conn = mysql_connect("localhost", "root", "root");
mysql_select_db("test", $conn);
$result = mysql_query("SELECT * FROM users", $conn);
while ($row = mysql_fetch_object($result)) {
echo "用戶ID:" . $row->user_id . "<br>";
echo "用戶名:" . $row->user_name . "<br>";
}
?>
特點:返回匿名對象,屬性對應列名,適合面向對象代碼風格,邏輯清晰但略慢於數組方式。
| 函數 | 速度 | 訪問方式 | 適用場景 | 備註 |
|---|---|---|---|---|
| mysql_result | ★☆☆☆☆ | 行號+列名 | 極小結果集、隨機訪問 | 大數據集禁用 |
| mysql_fetch_row | ★★★★★ | 數字索引 | 高性能、固定列順序 | 維護成本高 |
| mysql_fetch_array | ★★★★☆ | 數字+關聯 | 通用業務開發首選 | 默認雙索引佔內存 |
| mysql_fetch_object | ★★★☆☆ | 對象屬性 | OOP 專案、結構複雜數據 | 構建對象有開銷 |
mysql_fetch_array($result, MYSQL_ASSOC) 仅返回關聯數組,兼顧性能與清晰度理解底層差異,才能在技術棧演進中做出正確選擇。