gpt4 book ai didi

sql-server - SQL 查询的 ColdFusion 单引号问题

转载 作者:行者123 更新时间:2023-12-02 03:20:46 27 4
gpt4 key购买 nike

在我的 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 可能不合适,或者可能需要对客户不允许的代码进行全面检修。

最佳答案

这是个棘手的问题。恐怕我只能想出一个令人讨厌的“解决方案”。

  • 替换值分隔符:<cfset where_clause = replace(where_clause, "''", "§§", "ALL")>
  • 然后转义实际的单引号:<cfset where_clause = replace(where_clause, "'", "\'", "ALL")>
  • 现在恢复替换并规范化分隔符:<cfset where_clause = replace(where_clause, "§§", "'", "ALL")>

把它放在一起:

<cfset substitution = "§§"> <!--- use whatever char sequence works best for your data --->

<!--- fallback in case the substitution is part of your data --->
<cfif where_clause contains substitution>

<cfset substitution = "°°°">
<!---
you can basically start looping through a bunch of alternatives
or even expand the substition with an additional character
...you get the idea
--->

</cfif>

<cfset where_clause = replace(where_clause, "''", substitution, "ALL")>
<cfset where_clause = replace(where_clause, "'", "\'", "ALL")>
<cfset where_clause = replace(where_clause, substitution, "'", "ALL")>

<cfquery...

如您所见,这仍然存在很大问题,并且可能有一天会失败。但是,只要您必须处理 where_clause,可能就没有更好的选择了。变量。

关于sql-server - SQL 查询的 ColdFusion 单引号问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33575927/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com