MySQL拡張機能は、PHPを使用してMySQLデータベースを操作する場合の一般的な選択です。クエリを実行した後、通常は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_rowsは0です。使用:
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;
}