在我的 ColdFusion 11 应用程序中,使用 SQL Server 2008-R2,我在 CF 组件中跟踪了 cfquery 标记:
<cfquery name="result_set" dataSource="#request.dsn_name#">
select name, state from myTable #REReplace(where_clause,"''","'","ALL")#
</cfquery>
这where_clause
是一个变量。CF 将一个单引号替换为两个,因此我使用 REReplace 函数将两个单引号替换为一个。所以我的查询发生了变化,例如从
select name, state from myTable WHERE name IN (''ABC'')
对此:
select name, state from myTable WHERE name IN ('ABC')
问题是名称列值也包含单引号时。例如
select name, state from myTable WHERE name IN ('Smith's bat')
在这种情况下,查询失败。我该如何解决这种情况。我尝试了PreserveSingleQuotes但它有同样的问题,列的值带有单引号。
更新
这个应用程序是几年前由使用 ColdFusion MX 7 的人开发的。原作者正在根据某些条件为 where_clause 变量创建动态字符串。这是一个长 cfs 文件,其中包含用于为 where_clause 创建动态字符串的多个条件。因此,使用 cfqueryparam 可能不合适,或者可能需要对客户不允许的代码进行彻底检查。