0

データベースを検索する単純なphp mysql検索がありますが、検索フィールドとカテゴリからテキストを検索するようには見えませんが、選択した場合にのみカテゴリを検索したいのですが、

これは私が試した私のコードです:

if ($search !== null){

    $sql = "SELECT * FROM people WHERE MATCH (lname,fname) AGAINST (:search IN BOOLEAN MODE) ORDER BY price ".$price." LIMIT ".$start.", ".$limit;

    $q   = $conn->prepare($sql) or die("failed!");
    // Bind the params to the placeholders
    $q->bindParam(':search', $search, PDO::PARAM_STR);
    $q->execute();
}


if ($search !== null && $category !== null){

    $sql = "SELECT * FROM people WHERE MATCH (lname,fname) AGAINST (:search IN BOOLEAN MODE) and category=:category ORDER BY price ".$price." LIMIT ".$start.", ".$limit;

    $q   = $conn->prepare($sql) or die("failed!");
    // Bind the params to the placeholders
    $q->bindParam(':search', $search, PDO::PARAM_STR);
    $q->bindParam(':category', $category, PDO::PARAM_STR);
    $q->execute();
}

ただし、選択した場合でも、カテゴリ フィールド オプションは無視されます。何か案は?

それらは次のように設定されています。

   // Check and set category
$category = (!empty($_GET['category']) ? $_GET['category'] : null);

// Check and set search
if(!empty($_GET['search'])){
    $search = $_GET['search'];
}else{
    $search = null;
}
4

1 に答える 1

1

デバッグを行って、 が設定されていることを確認$search$categoryます。それはおそらくあなたの問題です。見た目からすると、$category設定されているはずです(クエリ文字列から来ていると言ったので)が、両方を確認してください。何かのようなもの:

if($category !== null)
    die("category = $category");
else {
    die("no category");
}
//do same test for $search

ユーザーがリンク ( <a href="search.php?category=Books">Books?</a>) からこのページにアクセスしている場合、どのように設定されるかわかりません$_GET['search']

ifステートメントをより効率的に変更することをお勧めします(実行されるのは 1 つだけです)。

if ($search !== null){
    if($category !== null){
        //query with category
    }
    else {
        //query w/o category
    }
}

また、isset()これらの変数が の代わりにインスタンス化されているかどうかを確認するために使用しますempty()

于 2012-10-11T18:10:50.220 に答える