2012-06-11 43 views
1

我在我的一個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陣列一個用於整個陣列一個只有一個密鑰。但是,它是行不通的。

+1

只是注意,你應該使用'mysqli_ *'或'PDO'爲'mysql_ *'已被棄用。 –

+1

@TimWithers你的意思是「灰心喪氣」,雖然我猜這基本上是一樣的東西 – Mike

+0

@Mike,你是對的。這是我的錯誤。這是星期一... –

回答

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

我相信while循環中的第一個塊是多餘的。這應該基本上檢查'mysql_num_rows($ exeQuery)',所以不應該真的發生在那裏(我認爲)。如果我錯了,請糾正我! – Sephallia

+0

你是對的。我已經更新了我的答案。 – Mike

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

我不是100%肯定這一點,但我不記得mysql_fetch_array將工作只有有獲取實際結果。 while循環只能在mysql_fetch_array函數成功運行時運行。但是,當查詢返回任何結果時,mysql_fetch_array將無法​​成功運行,所以循環將不會運行,因此,您的if塊沒有機會運行。

編輯:Habeeb的代碼應該爲您解決問題:p。儘管我的答案在這裏,因爲我確實提供了有關代碼問題的一些解釋。我相信這對將來可能會看到這個問題的人來說是一個有用的參考。

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