我正在为我的个人图书馆编写一个图书馆搜索程序,在选择多个单词时遇到麻烦


Im writing a library search program for my personal library, having trouble with a select with multiple words

例如,如果我搜索"cat",我会得到所有带有"cat"一词的标题,例如"cat in the hat"。

如果我输入"cat hat",我应该得到"cat in the hat",但查询返回空,因为它正在寻找确切的"cat hat"并忽略"cat in the hat"。

我需要某种选择,它可以查找带有我搜索的任何单词的所有标题,然后对下一个单词执行此操作,等等......然后...我不知道,某种大而有趣的东西...

到目前为止,我玩的是这样的东西:

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

可能需要某种递归函数,它将搜索输入分解为字符串数组,并对每个字符串进行搜索,然后合并它们。

想法?

您正在寻找 MySQL 全文搜索

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

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

如果输入数组只是针对一个字段进行查询,您应该能够执行此操作。 如果是多个字段,则必须使用地图执行此操作。

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

答案:

  1. 拆分普通符号和空格上的$search,然后生成查询

  2. 使用 MySql 全文搜索

陷阱:完整的SQL文本搜索是更好的选择,它将产生更快的结果。 另请注意,您当前的查询容易受到 SQL 注入的攻击,请使用 mysqli::real_escape_string 来避免这种情况。

谢谢