2012-07-31 119 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