【发布时间】:2016-06-16 05:25:53
【问题描述】:
我有一个查询包含一些导致语法错误的字符,因为它包含保留字符,我正在努力了解如何正确转义字符串。
查询是:
SELECT * FROM `products`
WHERE MATCH (code, description)
AGAINST (UPPER(+("intel"*) +("cpu"*)) IN BOOLEAN MODE)
但是当我运行这个查询时,我得到了以下错误:
1064 - 您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 在第 1 行靠近 ') +("cpu"*)) ) IN BOOLEAN MODE)'
好的,它不喜欢),因为它表明AGAINST 正在关闭,但它还没有(还)。所以我试图用反斜杠转义它,但它仍然抛出同样的错误。
如果我在 PHP 中使用准备好的语句尝试此操作,同时将搜索字符串 +("intel"*) +("cpu"*) 绑定到它工作的语句中。因此,它似乎逃脱它的方式不是用反斜杠或有别的东西。
所以我查看了mysqlescapestring 的 PHP 文档,我看到它:“将反斜杠添加到以下字符:\x00、\n、\r、\、'、”和 \x1a。”。
这表明单引号和双引号需要转义,我尝试这样做,但它只是在双引号字符上引发相同的语法错误,即to use near '\"intel\"*\)...
我确实明白最好使用准备好的语句,这可以解决问题,但我只想了解我在这里做错了什么以及如何在 AGAINST 子句中转义这样的字符串,因为我在这里做了。
如果有人能建议我哪里出了问题,那将不胜感激。谢谢。
【问题讨论】:
-
你到底想成为 AGAINST() 的参数是什么?
-
@e4c5 嘿,感谢您的回复。如果我理解这个问题,任何包含以
INTEL和CPU开头的单词。如前所述,这确实有效,但前提是我在 PHP 中准备它,这显然是在进行一些转义,但我不确定它到底在转义什么以及它是如何做到的。我将以下参数传递给准备好的语句:+("intel"*) +("cpu"*)
标签: mysql escaping full-text-search prepared-statement