如何阻止 coldfusion 在字符串中添加单引号

how to stop coldfusion from adding single quotes in string

我有一个动态 sql 语句,我想发送到 SQL 服务器。查询的基础在一个名为 query:

的变量中
<cfset query ="select 
            ParcelID,
            LTRIM(IIF(AddNum IS NOT NULL, ' ' + AddNum, '') + IIF(AddDir IS NOT NULL, ' ' + AddDir, '')  + ' ' + AddStreet + IIF(AddUnitNum IS NOT NULL, ' ' + AddUnitNum, '') + ' ' + AddCity + ', ' + AddState + ' ' + AddZip + IIF(AddZip4 IS NOT NULL, '-'+ AddZip4, '')) as Address
        from PropertyParameters
        where AddZip = '#URL.zip#'">

我的问题是看到quote-space-quote加字段的地方(即''+AddNum),单引号加多了单引号,把下面的发给sql 服务器:

select ParcelID,
LTRIM(IIF(AddNum IS NOT NULL, '' '' + AddNum, '''') + IIF(AddDir IS NOT NULL, '' '' + AddDir, '''')  + '' '' + AddStreet + IIF(AddUnitNum IS NOT NULL, '' '' + AddUnitNum, '') + '' '' + AddCity + '', '' + AddState + '' '' + AddZip + IIF(AddZip4 IS NOT NULL, ''-''+ AddZip4, '')) as Address
from PropertyParameters
where AddZip = 20001 and Score > 70;

如您所见,引号在 sql 服务器中被加倍并失败。 我该如何克服这个问题?

谢谢。

更新 1:我尝试根据 coldfusion 说明('' 和 "")转义引号,但仍然无效。谢谢

您 sql 查询可以通过使用带有 ISNULL() 函数的以下查询来简化:

select ParcelID
      ,LTRIM(
         ISNULL(' ' + AddNum , '') 
       + ISNULL(' ' + AddDir , '')  
       + ' ' + AddStreet 
       + ISNULL(' ' + AddUnitNum, '') 
       + ' ' + AddCity + ', ' + AddState + ' ' 
       + AddZip 
       + ISNULL('-'+ AddZip4, '')
       ) as Address
from PropertyParameters
where AddZip = '#URL.zip#

要转义单引号,您需要使用 PreserveSingleQuotes() 函数。

<cfquery ...>#PreserveSingleQuotes(query)#</cfquery>