当我试图将一个match against语句中的一个MySQL语句与一个特定字符混合时,我得到了一个SQL错误,这个字符在MySQL转义函数中没有涵盖。
这就是一个例子:
要搜索的名称是:Tommy -
生成的(错误)查询是:
Select *
From users
Where match(name,username)
Against('+tommy -*' in boolean
mode)修复它的最佳方法是什么,以及为什么mysql_escape函数不涵盖它?
发布于 2015-08-22 06:52:10
MATCH(...) AGAINST('+tommy' IN ...)
AND ... LIKE '%tommy -%'也就是说,使用FULLTEXT来做它最擅长的事情(搜索单词),然后通过LIKE或REGEXP检查比较复杂的结果。
当然,您的应用程序代码中需要一些智能来构造匹配和R相似的适当组合。但是结果是快速的,覆盖的范围远远超过全文本身所能做的。
注意:优化器将首先进行匹配,然后对其他内容进行筛选。
发布于 2015-08-20 17:09:59
PHP的mysql转义函数可能没有完全文本感知。
MySQL文档中提到了Booelan模式全文搜索中的双引号
“一些单词”“查找包含确切短语”“一些单词”的行(例如,包含“一些智慧词”而不是“一些噪音词”的行)。注意,包含短语的“”字符是分隔短语的运算符字符,它们不是包含搜索字符串本身的引号。
如果您正在寻找Tommy -,请用双引号发音,并将其与*分开。
Select *
From users
Where match(name,username)
Against('+"tommy -"*' in boolean mode)https://dba.stackexchange.com/questions/111703
复制相似问题