2013-01-22 31 views
-1

例如,如果我搜索'猫',我会得到所有带有'猫'字样的标题,例如'cat在帽子里'。为我的个人图书馆编写图书馆搜索程序,在选择多词时遇到问题

如果我输入'cat hat',我应该找回'cat in the hat',但查询返回空白,因为它正好查找'cat hat'并忽略'cat in the hat'。

我需要某种选择,在其中查找所有标题与我搜索的任何单词,然后为下一个单词等等......然后......我不知道,某种大而全面的东西...

到目前为止林与somethign就像玩:

$query = "SELECT title 
FROM books 
WHERE TITLE LIKE '%" . $search . "%' LIMIT 0,75;"; 

可能需要某种形式的递归函数的地方它打破了搜索输入字符串数组和做每一样东西,合并搜索他们。

想法?

+0

你应该知道,这打开与SQL注入 – Lamak

+0

@lamak虽然你是正确的,我相信他正在写这个程序供自己使用的攻击。所以除非他打算sql注入自己,否则它应该没问题... –

回答

0
$query = "SELECT title 
FROM books 
WHERE TITLE LIKE '%" . $search1 . "%' AND LIKE '%" . $search2 . "%' LIMIT 0,75;"; 

您需要为每个搜索项添加一个AND子句。如果你愿意,你也可以添加一个OR。他们会给出不同的结果。 OR会有更多的结果,AND当然会更具体。

0

您应该能够输入数组做到这一点如果是单纯针对查询一个字段。如果它是多个字段,则必须使用地图来完成。

我想指出的一件事是,这看起来像SQL注入的目标可疑。在将SQL查询串联在一起时请非常谨慎。必须转义和/或参数化最终结果以防止用户运行任意SQL。

0

答案:

  1. 斯普利特$搜索上的常态符号和空格,然后生成查询

  2. 使用MySql Full Text Search

陷阱: 完整的SQL文本搜索更好的选择会导致更快的结果。另外请注意,您当前的查询很容易受到SQL注入的影响,请使用mysqli::real_escape_string来避免这种情况。

感谢

+0

它的唯一更快的,如果它的很多记录和它的索引。否则一个简单的AND就会工作得很好。 –