PreserveSingleQuotes和CFQueryParam

时间:2015-10-14 12:50:20

标签: coldfusion cfqueryparam

我正在使用CFLoop构建动态 SQL查询。 我正在使用CFSaveContent迭代变量并构建查询,然后我使用CFQueryPreserveSingleQuotes中执行它。 这很好但这个方法的问题是我不能使用CFQueryParam所以我的查询容易被注入。 想知道这个问题是否有解决办法?

更新

    <cfsavecontent variable="sqlstring">
            SELECT   id
                    ,(CASE
                        <cfloop query="qGetRules">
                            WHEN val1 >=#qGetRules.equ# AND val2 >#arguments.leve# THEN 1
                        </cfloop>
                        ELSE 0
                         END) AS criteria
            FROM mt4_users
    </cfsavecontent>


    <cfquery name="qGetEquity" datasource="mydatasource">
        #PreserveSingleQuotes(variables.sqlstring)#
    </cfquery>

因此,在此示例中,您可以看到我无法将cfqueryparam用于arguments.leve,因为它会在PreserveSingleQuotes上崩溃

1 个答案:

答案 0 :(得分:0)

诀窍是使用list的{​​{1}}参数。它将正确格式化查询数据,转义引号(如果需要)和所有。

如果列表是数值(例如在cfqueryparam语句中):

WHERE X IN (1,2,3,4)

如果列表是字符串值:

<cfqueryparam value="#arguments.foo#" cfsqltype="cf_sql_integer" list="true">

这也适用于<cfqueryparam value="#arguments.foo#" cfsqltype="cf_sql_varchar" list="true">