我在我的一个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数组一个整个数组一个只有一个键。但是它不起作用。
答案 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!";
}
}