4

私は単純な検索クエリを持っています:

<cfquery name="_qSearch" dbtype="Query">
    SELECT 
        *
    FROM    MyQoQ
    WHERE
        DESCRIPTION LIKE '%#URL.searchString#%'
</cfquery>

このクエリは、ほとんどの値に対してうまく機能します。ただし、誰かが のような値を検索する"xxx[en"と、エラー メッセージが表示されますThe pattern of the LIKE conditional is malformed.

ブラケットは CFQUERY で特別な用途があるため、これを回避する方法はありますか?

4

1 に答える 1

8

QoQは TSQL (MS SQL Server)の機能を共有しており、LIKE のワイルドカードであるだけ%でなく、小文字の_ように正規表現スタイルの文字クラスもサポートしています。[a-z]

これらの値をエスケープし、リテラルに相当するものに一致させるには、文字クラス自体を使用できます。つまり[[]、リテラルに一致し[ます。もちろん、ユーザー入力で any%およびもエスケープしたい_場合があります。次のように 3 つすべてを実行できます。

'%#Url.SearchString.replaceAll('[\[%_]','[$0]')#%'

これは単純な正規表現置換 ( String.replaceAll[を使用) で、 or%またはのすべてのインスタンスに一致し、それぞれを.._でラップします-置換側の は一致したテキストを表します。[]$0

于 2014-02-24T21:57:46.380 に答える