2

これはおそらく以前に尋ねられたことがあります。お気軽にリンクしてください。

非常に単純です。検索フォームの結果を表示する必要があります。その部分は簡単で、私はそれを機能させることができます。私が問題を抱えているのは、ユーザーが検索したものと一致する結果がない場合です。

IF ステートメントを使用する必要があることは確かですが、PHP の経験があまりなく、コードを正しく表示する方法がわかりません。

これは私がこれまでに持っているものです:

$query = "SELECT * FROM search WHERE isbn='$isbn' OR bookname='$bookname' OR author='$author' OR category='$category'";

if (!$query)
{
    echo "No results found in the database. Please go back and search again.";
}

私の質問は次のとおりです。ユーザーの検索がデータベース内の何も一致しない場合に、「結果が見つかりません...」というメッセージを表示するにはどうすればよいですか?

- PHP および SQL 内の特定の用語を理解しようとすると、すぐに混乱してしまうので、まったくの初心者と同じように答えを説明してください。

よろしくお願いします。

4

2 に答える 2

1

データベース テーブルに行が見つからない場合に、「結果が見つかりませんでした」というメッセージを表示します。

これを行うには、以下の PHP および SQL コードを使用できます。

$sql = "SELECT * FROM search WHERE isbn='$isbn' OR bookname='$bookname' OR author='$author' OR category='$category'";
$query = $db->prepare($sql);
$query->execute();
$rows = $query->fetch(PDO::FETCH_NUM);
if($rows[0]) { 
    // Row exists
} else {
    echo "No results found in the database. Please go back and search again.";
}

上記の回答は、SQL インジェクション攻撃に対して脆弱であることに注意してください。SQL インジェクション攻撃を防ぐには、ユーザーが送信したすべてのデータを準備してバインドすることをお勧めします。SQL インジェクション攻撃を防ぐ方法を示すより良い例を次に示します: (データベース接続を含む完全な例)

$db = new PDO($dsn);
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$query = $db->prepare("SELECT * FROM search WHERE isbn=:isbn OR bookname=:bookname OR author=:author OR category=:category");
$query->execute([ ':isbn'=>$isbn, ':bookname'=>$bookname, ':author'=>$author, ':category'=>$category ]);
$rows = $query->fetch(PDO::FETCH_NUM);
if($rows[0]) { 
    // Row exists
} else {
    echo "No results found in the database. Please go back and search again.";
}
于 2015-10-04T12:41:13.133 に答える