1

正在使用CFLoop. 我CFSaveContent用来遍历变量并构建查询,然后我在CFQueryusing中执行它PreserveSingleQuotes。这很好用,但这种方法的问题是我不能使用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>

所以在这个例子中,你可以看到我不能使用cfqueryparamarguments.leve因为它会崩溃PreserveSingleQuotes

4

1 回答 1

0

诀窍是使用 的list参数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">

这也适用于cfprocparam.

于 2015-10-14T15:28:57.540 回答