1

PHPサイトの1つで単純なMySQLクエリ検索を実行しましたが、期待どおりに機能しません。ユーザーが検索バーで用語を検索するときに、探しているコンテンツが存在しない場合、関数は「結果なし」を返す必要があります。しかし、それは空白を表示するだけで、メッセージは何もありません。

これが検索用の私のコードです:

function querySearch($searchTerm) {
    $query = "SELECT * FROM content_en WHERE content_body LIKE '%{$searchTerm}%' ORDER BY id DESC ";
    return $query;  
}

function getSearch($searchTerm) {
    $queryContents= querySearch($searchTerm);
    $exeQuery = mysql_query($queryContents);
    while( $fetchSet = mysql_fetch_array($exeQuery) ){
        if(empty($fetchSet)){
            echo "No Results Found";
        }else{
            if(empty($fetchSet['content_title'])){
                echo 'Sorry No results Found';
            }else{
                echo '<h2><a href="index.php?pageId='.$fetchSet['id'].'">'.$fetchSet['content_title'].'</a></h2><br/>';
                echo '<div>'.shortText($fetchSet['content_body'], 220).'</div><br/><br/>';
            }
        }
    }

}

私がそれを強制的に機能させるので、fetchSet配列のチェックが2つあり、配列全体に対して1つ、キーが1つだけに対して1つです。しかし、ええ、それは機能しません。

4

4 に答える 4

2

動作しない理由は、クエリにエラーがあるか、結果が返されないためです。

まず、次のように、に何らかのエラー処理を追加する必要がありますmysql_query

$exeQuery = mysql_query($queryContents) or die(mysql_error());

次に、結果が見つからない場合に何も出力されない理由mysql_fetch_arrayは、取得する結果がある場合にのみ結果をループするためです。したがって、0行が返される場合、whileループ全体が完全にスキップされます。代わりに、ループするmysql_num_rows 前に使用できます。

例えば:

if (mysql_num_rows($exeQuery) > 0) {
    while( $fetchSet = mysql_fetch_array($exeQuery) ){
        echo '<h2><a href="index.php?pageId='.$fetchSet['id'].'">'.$fetchSet['content_title'].'</a></h2><br/>';
        echo '<div>'.shortText($fetchSet['content_body'], 220).'</div><br/><br/>';
    }
}
else {
    echo "No Results Found";
}
于 2012-06-11T21:59:45.977 に答える
1

このコードを試してください

function querySearch($searchTerm) {
    $query = "SELECT * FROM content_en WHERE content_body LIKE '%{$searchTerm}%' ORDER BY id DESC ";
    return $query;  
}

function getSearch($searchTerm) {
    $queryContents = querySearch($searchTerm);
    $exeQuery = mysql_query($queryContents);
    if(mysql_num_rows($exeQuery) > 0)
    {
        while( $fetchSet = mysql_fetch_array($exeQuery) )
        {
            echo '<h2><a href="index.php?pageId='.$fetchSet['id'].'">'.$fetchSet['content_title'].'</a></h2><br/>';
            echo '<div>'.shortText($fetchSet['content_body'], 220).'</div><br/><br/>';
        }
    }
    else
    {
         echo "No Results Found";
    }
}
于 2012-06-11T21:27:44.143 に答える
1

これについて100%確信はありませんが、実際の結果が取得された場合にのみmysql_fetch_array機能することを思い出します。whileループは、関数が正常に実行された場合にのみ実行されます。ただし、クエリが結果を返さない場合、は正常に実行されないため、ループは実行されません。したがって、ifブロックにも実行する機会が与えられません。mysql_fetch_arraymysql_fetch_array

編集:Habeebのコードはあなたのためにあなたの問題を修正するはずです:p。ただし、コードの問題について説明しているので、ここで答えを残しておきます。将来これを見るかもしれない誰かへの有用な参考になると確信しています。

于 2012-06-11T21:28:23.570 に答える
1

これを試してみてください。

function querySearch($searchTerm) {
    $query = "SELECT * FROM content_en WHERE content_body LIKE '%{$searchTerm}%' ORDER BY id DESC";
    return $query;  
}

function getSearch($searchTerm) {
    $queryContents= querySearch($searchTerm);
    $exeQuery = mysql_query($queryContents);
    $num_rows = mysql_num_rows($exeQuery);
    if($num_rows)
    {
        while( $fetchSet = mysql_fetch_array($exeQuery) ){
            echo '<h2><a href="index.php?pageId='.$fetchSet['id'].'">'.$fetchSet['content_title'].'</a></h2><br/>';
            echo '<div>'.shortText($fetchSet['content_body'], 220).'</div><br/><br/>';
        }
    }else{
        echo "No Result Found!";
    }
}
于 2012-06-11T21:31:08.980 に答える