1

我在我的一个 PHP 站点中进行了一个简单的 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 数组,一个是整个数组,一个是一个键。但是,是的,它不起作用。

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 回答