現在の位置: ホーム> 最新記事一覧> mysqli_resultを使用する場合、クエリの結果が空であることをどのように判断し、正しく処理しますか?

mysqli_resultを使用する場合、クエリの結果が空であることをどのように判断し、正しく処理しますか?

M66 2025-06-15

MySQL拡張機能は、PHPを使用してMySQLデータベースを操作する場合の一般的な選択です。クエリを実行した後、通常はmysqli_resultオブジェクトを取得しますが、多くの開発者は重要なリンクを無視します。クエリの結果が空であるかどうかを判断します。この記事では、クエリの結果が空の状況を判断し、正しく処理する方法を詳細に説明します。

1。基本的なクエリの例

まず、簡単なクエリの例を見てみましょう。

 <?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();
?>

2。キーポイントの説明

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を明示的にチェックすることをお勧めします。

3.結果のない状況をエレガントに処理する方法

実際のプロジェクトでは、「結果なし」を直接出力するだけでは十分ではありません。次のようなシナリオに従って最適化できます。

  • フレンドリーなプロンプトページに戻ります。

  • ログを記録して、分析後を促進します。

  • 次のような他のページにジャンプします。

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