首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL逃逸字符

MySQL逃逸字符
EN

Database Administration用户
提问于 2015-08-20 14:34:35
回答 2查看 3.9K关注 0票数 2

当我试图将一个match against语句中的一个MySQL语句与一个特定字符混合时,我得到了一个SQL错误,这个字符在MySQL转义函数中没有涵盖。

这就是一个例子:

要搜索的名称是:Tommy -

生成的(错误)查询是:

代码语言:javascript
复制
Select * 
From users
Where match(name,username) 
            Against('+tommy -*' in boolean     
                          mode)

修复它的最佳方法是什么,以及为什么mysql_escape函数不涵盖它?

EN

回答 2

Database Administration用户

发布于 2015-08-22 06:52:10

代码语言:javascript
复制
MATCH(...) AGAINST('+tommy' IN ...)
    AND ... LIKE '%tommy -%'

也就是说,使用FULLTEXT来做它最擅长的事情(搜索单词),然后通过LIKEREGEXP检查比较复杂的结果。

当然,您的应用程序代码中需要一些智能来构造匹配和R相似的适当组合。但是结果是快速的,覆盖的范围远远超过全文本身所能做的。

注意:优化器将首先进行匹配,然后对其他内容进行筛选。

票数 2
EN

Database Administration用户

发布于 2015-08-20 17:09:59

PHP的mysql转义函数可能没有完全文本感知。

MySQL文档中提到了Booelan模式全文搜索中的双引号

“一些单词”“查找包含确切短语”“一些单词”的行(例如,包含“一些智慧词”而不是“一些噪音词”的行)。注意,包含短语的“”字符是分隔短语的运算符字符,它们不是包含搜索字符串本身的引号。

如果您正在寻找Tommy -,请用双引号发音,并将其与*分开。

代码语言:javascript
复制
Select * 
From users
Where match(name,username) 
            Against('+"tommy -"*' in boolean mode)
票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/111703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档