首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP mysqli 查詢結果解析:物件與陣列兩種模式完整示範

     編輯:PHP 綜合知識

前言

`mysqli_result` 提供多種提取資料列的方法,最常用的是 `fetch_object()` (物件) 與 `fetch_array()` (陣列)。本文示範兩種模式的寫法與差異。

方法一:提取為物件 `fetch_object()`

適合欄位名固定、程式碼可讀性優先的情境。

$sql = "SELECT name, brief FROM cars";
$result = $mysqli->query($sql);

while ($row = $result->fetch_object()) {
    echo "車款: {$row->name}
"; echo "簡介: {$row->brief}
"; } $result->free(); // 釋放記憶體

方法二:提取為陣列 `fetch_array()`

支援數值索引 (`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();

進階:一次性取得所有資料 `fetch_all()`

$allRows = $result->fetch_all(MYSQLI_ASSOC);
// 回傳二維陣列,適合直接 json_encode 輸出 API
echo json_encode($allRows);

效能與記憶體提醒

  • 大量資料集 (超過 10 萬列) 建議使用 **Unbuffered Query** (`MYSQLI_USE_RESULT`),逐列處理避免記憶體暴增。
  • 務必呼叫 `$result->free()` 釋放結果集記憶體。
  • 物件模式略慢於陣列模式,但在現代 PHP (7.0+) 差異可忽略。

完整錯誤處理範本

$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();
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved