【发布时间】:2012-06-10 18:38:34
【问题描述】:
在我被要求研究 Coldfusion 应用程序中一些奇怪的间歇性错误之前,我没有使用过 Coldfusion。
在阅读了有关范围的信息后,我认为问题是因为我的 cfc 函数中的所有变量都没有使用 var 关键字,并且在各种函数中使用了相同的变量名。因此,据我了解,变量的范围是页面级别,调用这些函数的不同线程将覆盖导致“奇怪”问题的变量。
我的问题是这样做的正确方法是什么?
<cfset var listCount = 0>
<cfquery name="qGetElementsByType" dbtype="query" maxrows="#arguments.num_to_return#">
SELECT elementId,
title, PIhtml, Rerhtml,
text, url, image, Rank, isPoll, pollId, subjectId
FROM arguments.element_query
WHERE <cfloop list="#arguments.element_type_id#" index="lcv">
<cfif listCount GT 0>
OR
</cfif>
subjectid = #lcv#
<cfset listCount = listCount + 1>
</cfloop>
</cfquery>
是否需要在每次设置 listCount 变量时添加var,还是仅在初始声明时添加?
【问题讨论】:
-
您运行的是什么版本的 ColdFusion?
-
这与你的问题无关,但实际上上面的代码中不需要循环。改用 cfqueryparam 既可以简化代码又有助于防止 sql 注入:即
WHERE subjectid IN ( <cfqueryparam value="#arguments.element_type_id#" cfsqltype="cf_sql_integer" list="true"> ) -
您使用的版本很重要。 ColdFusion 9 引入了一个新的 LOCAL 范围,专门用于函数。
标签: coldfusion scope coldfusion-9 cfc