當前位置: 首頁> 最新文章列表> 使用mysqli_result 時,怎麼判斷查詢結果為空並正確處理?

使用mysqli_result 時,怎麼判斷查詢結果為空並正確處理?

M66 2025-06-15

在使用PHP 操作MySQL 數據庫時, mysqli擴展是常用的選擇。執行查詢後,通常會得到一個mysqli_result對象,但很多開發者會忽略一個重要環節:判斷查詢結果是否為空。本文將詳細講解如何判斷並正確處理查詢結果為空的情況。

一、基本查詢例子

我們先來看一個簡單的查詢例子:

 <?php
$mysqli = new mysqli("localhost", "username", "password", "database");

if ($mysqli->connect_errno) {
    die("連接失敗: " . $mysqli->connect_error);
}

$sql = "SELECT * FROM users WHERE status = 'active'";
$result = $mysqli->query($sql);

if (!$result) {
    die("查詢失敗: " . $mysqli->error);
}

// 這裡是關鍵部分:檢查是否有結果行
if ($result->num_rows === 0) {
    echo "沒有找到符合條件的用戶。";
} else {
    while ($row = $result->fetch_assoc()) {
        echo "使用者名稱: " . htmlspecialchars($row['username']) . "<br>";
    }
}

$result->free();
$mysqli->close();
?>

二、關鍵點說明

1??檢查$result是否為false
這表示SQL 查詢語句本身出錯,例如語法錯誤或表不存在。使用:

 if (!$result) {
    // 查詢失敗,處理錯誤
}

2??檢查$result->num_rows
查詢成功但沒有匹配行時, num_rows0 。使用:

 if ($result->num_rows === 0) {
    // 查詢為空,處理無結果情況
}

3??避免直接用fetch_assoc()判斷空結果<br> 很多人直接用

if ($row = $result->fetch_assoc()) { ... }

這種方式如果沒有結果不會進入循環,但無法顯式區分是“空結果”還是“有行但沒滿足條件”。推薦顯式檢查num_rows

三、如何優雅處理無結果情況

在實際項目中,直接輸出“沒有結果”是不夠的。你可以根據場景進行優化,比如:

  • 返回一個友好的提示頁面;

  • 記錄日誌方便後期分析;

  • 跳轉到其他頁面,比如:

 if ($result->num_rows === 0) {
    header("Location: https://m66.net/no-results.html");
    exit;
}