2012-07-31 83 views
0

我有一堆LIKE狀態的查詢。我想optiimze /解釋查詢,運行良好。但是,如果我複製此:使用MySQL LIKE的正確語法?

SELECT a.*, p.ek, p.vk, p.waehrung, p.onlinepreis 
    FROM arts a USE INDEX (i_aktiv, i_iln, i_marke) 
     LEFT JOIN pls p ON 
      p.iln = a.iln 
     LEFT JOIN fbs zu 
      ON a.farbe = zu.farbe 
      WHERE a.aktiv = "ja" 
      AND (
     a.artikelbezeichnung LIKE ? 
    OR a.artikelbezeichnung_lang LIKE ? 
      OR ( a.farbe LIKE '%decke%' 
       OR zu.systemfarbe LIKE '%decke%' 
       OR zu.systemfarbe_en LIKE '%decke%' 
       ) 
           ) 
      ) 
     ... 

正如我想添加'%decke%'但MySQL總是拋出一個錯誤,如果我用%%參數。

任何想法我做錯了什麼?

我得到的錯誤是:

你有你的SQL語法錯誤...... '在OR(a.farbe LIKE' 檢查近視...% '%' decke%% decke%」 ......

+1

和錯誤。是......究竟是什麼? – paxdiablo 2012-07-31 02:42:52

+0

我已經使用了確切的格式,它對我來說工作得很好。 – cstrat 2012-07-31 02:47:00

+0

嗯......能不能是%'%'? – frequent 2012-07-31 02:47:27

回答

4

對於通配符喜歡攀比,你必須捏造事實:

WHERE somefield LIKE CONCAT('%', ?, '%') 

通配符‘喜歡’是一個地方,參數化查詢屬於單位在他們的臉上

+0

...好吧,通配LIKE和動態FROM子句... – 2012-07-31 02:46:19

+1

任何證明?我無法相信或谷歌它。爲什麼參數不能是'%foo%'字符串? – zerkms 2012-07-31 02:50:29

+0

如果你喜歡,你可以傳入'%foo%'',這樣就可以工作,但是你必須提前按下該參數的值。你不能有'LIKE'%?%''。這絕對不行。 – 2012-07-31 02:56:21