PHP MySQL搜索不起作用?

时间:2012-06-11 21:21:16

标签: php mysql

我在我的一个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 个答案:

答案 0 :(得分:2)

它不起作用的原因是因为查询中有错误或者没有返回任何结果。

首先,您应该为mysql_query添加某种错误处理,如下所示:

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

其次,如果没有找到结果,它永远不会打印任何内容的原因是因为mysql_fetch_array只会在结果得到时才会循环结果。因此,如果返回0行,则完全跳过整个while循环。相反,您可以使用mysql_num_rows BEFORE 循环。

例如:

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";
}

答案 1 :(得分: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";
    }
}

答案 2 :(得分:1)

我不是百分之百确定这一点,但我记得mysql_fetch_array仅在获取实际结果时才会起作用。 while循环仅在mysql_fetch_array函数成功运行时运行。但是,当查询没有返回结果时,mysql_fetch_array将无法成功运行,因此循环将不会运行,因此,您的if块也没有机会运行。

编辑:Habeeb的代码应该为您解决问题:p。尽管我在这里保留答案,因为我确实提供了一些关于代码问题的解释。我相信这对将来会对此有所了解的人有用。

答案 3 :(得分: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!";
    }
}