我正在使用构建一个动态CFLoop SQL查询。我使用CFSaveContent迭代变量并构建查询,然后使用PreserveSingleQuotes在CFQuery中执行它。这很好,但是这个方法的问题是我不能使用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上
发布于 2015-10-14 15:28:57
诀窍是使用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。
https://stackoverflow.com/questions/33125810
复制相似问题