2011-12-30 153 views
0

目前正在搜索表單上工作,它很好,但它沒有成功獲取任何結果。搜索MySQL數據庫的PHP表單

這裏的數據庫截圖

http://screensnapr.com/e/IdNs9j.png

正如你可以看到有字「龍」

現在,如果你去的search.php?NAME =龍了好結果帶來了以下結果:

Results 

Sorry, your search: dragon returned zero results 

You searched for: dragon 

Results 
End of results 

這裏的搜索查詢:

$searchTerm = trim($_GET['search']); 
$query = "select * from item where name like '$searchTerm' order by name"; 
$numresults=mysql_query($query); 
$numrows=mysql_num_rows($numresults); 
if ($numrows == 0) { 
echo "<h4>Results</h4>"; 
echo "<p>Sorry, your search: " . $searchTerm . " returned zero results</p>"; 
} 

爲什麼不顯示任何結果?任何幫助,將不勝感激。

回答

1

YOu未指定like操作的通配符運算符。沒有通配符,somefield LIKE 'something'somefield='something'完全一樣。

您的查詢應該是

SELECT ... LIKE '%$searchTerm%'; 
       ^--   ^-- wildcards 

,並注意你對SQL注入攻擊敞開的。至少你應該有

$searchTerm = mysql_real_escape_string($_GET['search']); 

或更好,但切換到使用PDO準備語句。

+0

謝謝,我原本有通配符,但我被告知刪除它們,因爲它們最終只會導致錯誤 也,我已經添加了mysqlrealescapestring,因爲你建議,謝謝我差點忘記了sql的攻擊: P 至於這個話題,通配符修復了它,謝謝 – Travs 2011-12-30 04:40:39

+0

它們不應該導致錯誤,除非你誤用它們,例如像'... LIKE%keyword%'不帶引號,或者像'... LIKE%'關鍵字'%'之類的外部引號。 – 2011-12-30 04:41:44

+0

以及最初的版本是/「%$ searchTerm%/」,但與我現在刪除的代碼的舊部分有問題,我認爲查詢的「喜歡」部分是通配符的原因:P – Travs 2011-12-30 04:42:59