我有一个简单的搜索查询:
<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中有特殊用途?
答案 0 :(得分:8)
QoQ共享一个feature of TSQL(MS SQL Server),它不仅仅是%
和_
LIKE中的通配符 - 它还支持正则表达式的字符类,如{{ 1}}表示任何小写字母。
要转义这些值并匹配文字等价物,您可以使用字符类本身,即[a-z]
将匹配文字[[]
,当然您可能也想要逃避任何{{1}用户输入中的}和[
- 你可以这样做所有三个:
%
这只是一个简单的正则表达式替换(使用String.replaceAll)来匹配_
或'%#Url.SearchString.replaceAll('[\[%_]','[$0]')#%'
或[
的所有实例,并将每个实例包装在%
中.. _
- 替换方的[
代表匹配的文字。