mysql_fetch_array() 的三種模式<?php
// 設定資料庫連線參數
$host = 'localhost';
$user = 'root';
$pass = 'your_password';
$db = 'test';
// 1. 建立連線
$mysqli = new mysqli($host, $user, $pass, $db);
if ($mysqli->connect_errno) {
die('連線失敗: ' . $mysqli->connect_error);
}
// 2. 設定字元集 (重要!避免中文亂碼)
$mysqli->set_charset('utf8mb4');
// 3. 執行查詢
$sql = 'SELECT UserId, UserName, Gender FROM users';
$result = $mysqli->query($sql);
if (!$result) {
die('查詢錯誤: ' . $mysqli->error . ' | SQL: ' . $sql);
}
// 4. 取得筆數
$numRows = $result->num_rows;
echo "查詢成功,共 $numRows 筆資料。
";
// 5. 逐筆處理結果集 (關聯陣列模式)
while ($row = $result->fetch_assoc()) {
echo "ID: {$row['UserId']} | 姓名: {$row['UserName']} | 性別: {$row['Gender']}
";
}
// 6. 釋放結果集記憶體
$result->free();
// 7. 關閉連線
$mysqli->close();
?>
| 方法 | 回傳結構 | 適用場景 |
|---|---|---|
fetch_assoc() | 關聯陣列 ['欄位名' => 值] | 最常用,語意清晰 |
fetch_row() | 數值索引陣列 [0 => 值, 1 => 值] | 效能略高,欄位順序固定時 |
fetch_array(MYSQLI_BOTH) | 同時包含關聯與數值索引 | 相容舊代碼,記憶體佔用較大 |
CHARSET=utf8mb4、連線 set_charset('utf8mb4')、HTML 頁面 <meta charset="utf-8"> 三者一致。mysql_*,請改用 mysqli 或 PDO。$result->num_rows === 0 為正常狀況,請用 if ($numRows === 0) 判斷空結果。$mysqli->error 並檢查欄位名、表名拼寫;善用 printf("SQL: %s", $sql) 除錯。$stmt = $mysqli->prepare('SELECT UserId, UserName FROM users WHERE Gender = ? AND age > ?');
$stmt->bind_param('si', $gender, $age); // s=字串, i=整數
$gender = 'M'; $age = 18;
$stmt->execute();
$res = $stmt->get_result();
while ($row = $res->fetch_assoc()) { /* ... */ }
$stmt->close();
掌握「連線 → 設定編碼 → 查詢 → 迴圈處理 → 釋放資源 → 關閉連線」標準流程,並養成使用預處理語句的習慣,即可安全高效地從 MySQL 讀取資料並呈現在網頁上。