当前位置: 首页> 最新文章列表> 使用 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() 判断空结果
很多人直接用:

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

这种方式如果没有结果不会进入循环,但无法显式区分是“空结果”还是“有行但没满足条件”。推荐显式检查 num_rows

三、如何优雅处理无结果情况

在实际项目中,直接输出“没有结果”是不够的。你可以根据场景进行优化,比如:

  • 返回一个友好的提示页面;

  • 记录日志方便后期分析;

  • 跳转到其他页面,比如:

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