PHP和MySQL搜索引擎使用LIKE混淆了结果中的撇号

PHP和MySQL搜索引擎使用LIKE混淆了结果中的撇号,php,mysql,search-engine,Php,Mysql,Search Engine,我正在使用PHP和MySQL在我的网站上创建一个基本的搜索引擎来查找人们发布的书籍,但问题是我使用了一些东西,例如: `title` LIKE '%".(string)$searchTerm."%' 注意:变量$searchTerm将被转义 我知道这被广泛使用,效果相当不错,但问题是,如果我有一本书的书名,例如: `title` LIKE '%".(string)$searchTerm."%' 作者参考 结果会显示,如果有人搜索“Writer's Reference”(没有双引号),但是如果

我正在使用PHP和MySQL在我的网站上创建一个基本的搜索引擎来查找人们发布的书籍,但问题是我使用了一些东西,例如:

`title` LIKE '%".(string)$searchTerm."%'
注意:变量$searchTerm将被转义

我知道这被广泛使用,效果相当不错,但问题是,如果我有一本书的书名,例如:

`title` LIKE '%".(string)$searchTerm."%'
作者参考

结果会显示,如果有人搜索“Writer's Reference”(没有双引号),但是如果有人只查找“Writers Reference”,结果不会显示,这就是为什么我在这里询问解决这个问题的好方法

使用AJAX每次查询onkeyup事件?将每个输出收集到一个数组中?但这可能会减慢进程。MySQL中是否有一种过滤和忽略撇号的方法,但同时,如果有人使用撇号,它会起作用?正则表达式操作

谢谢

编辑:我并不是在试图阻止SQL注入,我在寻找一种方法,如果有人查找一个没有撇号的单词,结果会显示一个撇号,但目前不会显示LIKE%%,因为它直接从数据库中获取单词。因此,如果搜索词没有撇号,而结果有撇号,它将不会显示

编辑2:在我跟随注释的过程中,我最近通过
altertable
dbname
book
添加全文(标题、说明)

但是在这之后,我使用一个切换框来查看用户是否选择在标题或描述中搜索,或者两者都有效,因为我使用的是
MATCH(title,description)对(“”(string)$sTerm。”)
但是其他只在标题或描述中搜索的内容不会按计划工作,当然,我有类似这样的内容:
MATCH(title)反对(“”(字符串)$sTerm。”)
但除非我使其与(“”(字符串)$sTerm。”)匹配(标题,标题),否则将不起作用(在匹配中添加另一个标题)


此外,当有人搜索没有撇号的“Writes Reference”时,由于某种原因,它仍然无法工作,可能是我的php代码吗?

您可以使用以下内容:

REPLACE(`title`, '\'', '') LIKE REPLACE('%".(string)$searchTerm."%', '\'', '')

。。。有一个缺点,MySQL将无法使用
title

上定义的索引,或者您是说您的数据库中有文本“Writer's reference”,即使有人在搜索“Writers reference”,您也希望它匹配?现在还不清楚到底是什么问题。是的,很抱歉,我没有仔细检查就匆匆键入了它,我编辑了它并添加了我想要的,是的,基本上,如果有人搜索标题时没有撇号,则询问是否有方法使用撇号显示结果。Like会将输入字符串与列匹配,就像您提供Like%Writers Reference%一样。您要求查找的结果在列中的任何位置都包含“Writers Reference”。所以它不会得到“作者参考”。我认为你需要研究全文索引。