目前我有一个音乐数据库,我已经在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']."';";
答案 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%'的记录(并注意%不被视为通配符)。