我有一個查詢,其中包含一些字符導致語法錯誤,因爲包含保留字符,我正在努力瞭解如何正確地轉義字符串。在WHERE ... MATCH ... AGAINST ...語句中轉義保留字符?
查詢是:
SELECT * FROM `products`
WHERE MATCH (code, description)
AGAINST (UPPER(+("intel"*) +("cpu"*)) IN BOOLEAN MODE)
但是當我運行此查詢我得到以下錯誤:
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') +("cpu"*))) IN BOOLEAN MODE)' at line 1
好了,罰款不喜歡)
,因爲這將表明AGAINST
正在關閉,但尚未(尚)。所以我試圖用反斜槓來逃避它,但它仍然會拋出同樣的錯誤。
如果我在PHP中使用準備語句嘗試此操作,同時將搜索字符串+("intel"*) +("cpu"*)
綁定到它的工作語句中。所以看起來它逃避它的方式不是反斜槓或有別的東西。
所以我一直在尋找爲mysqlescapestring PHP文檔,我看到了它:「預規劃反斜槓以下字符:\ X00,\ n,\ r,\,」, 「和\ X1A」
。這表明,單引號和雙引號需要進行轉義,我試圖做到這一點,但它只是拋出同樣的語法錯誤,但在雙引號字符,即to use near '\"intel\"*\)...
我不明白,這將是最好的使用準備好的語句,這解決了這個問題,但我只是想了解我在這裏做了什麼錯誤,以及如何像我這樣在AGAINST
子句中像這樣跳過一個字符串這裏。
如果有人可以建議我在哪裏出錯了,那麼將不勝感激。謝謝。
你想成爲AGAINST()的參數是什麼? – e4c5
@ e4c5嘿,謝謝你的迴應。如果我理解這個問題,任何包含以「INTEL」和「CPU」開頭的單詞。如前所述,這是行得通的,但前提是我使用PHP進行準備,這顯然是在進行一些轉義,但我不確定它究竟在逃避什麼以及如何做。我將準備好的語句傳入以下參數:'+(「intel」*)+(「cpu」*)' –