2011-12-30 125 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