搜索mysql数据库

时间:2010-04-20 16:16:41

标签: php mysql search

目前我有一个音乐数据库,我已经在mysql中db了,现在我正在为它编写一个php前端,它会列出表格中的所有内容,它可以工作,但如果我搜索“披头士乐队”它给了我453个结果(正确)但是如果我只是搜索“beatles”它会导致0行,我怎么能让它能够搜索到类似的东西呢?

继续我目前的路线:

$query2 = "SELECT * From `songs` WHERE `Artist` like '".$_REQUEST['q']."'
   OR `Album` like '".$_REQUEST['q']."' OR `Genre` like '".$_REQUEST['q']."'
       OR `Title` like '".$_REQUEST['q']."';";

编辑 @Yacoby

重新格式化查询
 $query2 = "SELECT * "
         . "From `songs` "
         . "WHERE `Artist` like '".$_REQUEST['q']."' "
         .   "OR `Album` like '".$_REQUEST['q']."' "
         .   "OR `Genre` like '".$_REQUEST['q']."' "
         .   "OR `Title` like '".$_REQUEST['q']."';";

4 个答案:

答案 0 :(得分:2)

在搜索字词之前和之后,在引号中输入%

WHERE Artist like '%".$_REQUEST['q']."%'

那将搜索[任何]披头士[任何]

答案 1 :(得分:0)

您可能需要考虑解析用户的输入并进行清理。摆脱像“the”这样的单词,只需在查询中使用重要单词,如“beatles”。

答案 2 :(得分:0)

您需要防止SQL注入。如果有人进入该怎么办:

'; DROP DATABASE music; --

或类似的东西?

答案 3 :(得分:0)

LIKE查询允许您使用SQL通配符(%_)。否则它的行为就像你使用常规'等于'比较一样:

SELECT .... WHERE somefield LIKE 'beatles';
SELECT .... WHERE somefield='beatles';

行为完全相同,而

SELECT .... WHERE somefield LIKE 'beatles%';

找到somefield以'beatles'开头的任何记录,

SELECT .... WHERE somefield='beatles%';

只会找到包含文字字符串'beatles%'的记录(并注意%不被视为通配符)。