0

たくさんの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構文にエラーがあります...近くを確認してください...%'%' decke%'at OR(a.farbe LIKE'%decke%'.. ..

4

1 に答える 1

5

ワイルドカードのLIKE比較では、偽造する必要があります。

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

ワイルドカードの「いいね」は、パラメータ化されたクエリが面倒な場所の1つです。

于 2012-07-31T02:44:45.520 に答える