`mysqli_result` 提供多種提取資料列的方法,最常用的是 `fetch_object()` (物件) 與 `fetch_array()` (陣列)。本文示範兩種模式的寫法與差異。
適合欄位名固定、程式碼可讀性優先的情境。
$sql = "SELECT name, brief FROM cars";
$result = $mysqli->query($sql);
while ($row = $result->fetch_object()) {
echo "車款: {$row->name}
";
echo "簡介: {$row->brief}
";
}
$result->free(); // 釋放記憶體
支援數值索引 (`MYSQLI_NUM`)、關聯索引 (`MYSQLI_ASSOC`) 或兩者兼備 (`MYSQLI_BOTH`,預設)。
$sql = "SELECT name, brief FROM cars";
$result = $mysqli->query($sql);
// MYSQLI_ASSOC:僅關聯鍵名
while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
echo "{$row['name']} - {$row['brief']}
";
}
// MYSQLI_NUM:僅數值索引 (0, 1, ...)
while ($row = $result->fetch_array(MYSQLI_NUM)) {
echo "{$row[0]} - {$row[1]}
";
}
$result->free();
$allRows = $result->fetch_all(MYSQLI_ASSOC); // 回傳二維陣列,適合直接 json_encode 輸出 API echo json_encode($allRows);
$sql = "SELECT * FROM products WHERE category = ?";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param('s', $cat);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows === 0) {
echo "無資料";
} else {
while ($row = $result->fetch_object()) {
// 處理每列
}
}
$stmt->close();