【问题标题】:Issues with CFQUERY scopeCFQUERY 范围的问题
【发布时间】:2021-04-22 06:53:58
【问题描述】:

据我所知

<cfquery name="groups">

等价于

<cfquery name="VARIABLES.groups">

在我的项目中,在不同的部分(在不同的函数内)有一个同名的cfquery。

当有很多请求时,我开始从 REST API (Coldfusion) 收到奇怪的响应,其中有不同的数据集。

通过实验,我意识到如果我在调用cfquery之前声明一个局部变量,这样就可以解决问题,因为答案将完全写入函数变量,而不是全局变量。

<cfset var groups = {} /> <cfquery name="groups">

此选项在所有测试用例中都能正常工作。

我的问题是:在函数内部为 cfquery 声明一个局部变量是否正确,或者有其他方法可以避免我的问题吗?

【问题讨论】:

    标签: scope coldfusion coldfusion-10


    【解决方案1】:

    你应该总是使用 (when in a function ):

    <cfset var groups = {} /> 
    <cfquery name="groups">
    
    or
    
    <cfquery name="local.groups">

    您也可以在函数内部使用本地范围。如果不使用 var,您实际上是在创建一个全局变量。在函数内部使用 var 或 local 将再次保护您在函数外部写入变量。

    【讨论】:

    • 这个答案建议人们也应该在函数之外使用 var 关键字。我不同意。
    • 答案明确表示“函数内部的 var 或 local”。问题里面还专门讲了一个函数。虽然我已经说得更清楚了。
    • 还值得注意的是,如果 var / local 函数中本地 cfquery 名称的作用域对 OP 来说是新闻,那么还要记住将相同的规则应用于其他类似的标签声明的变量,比如 cfloop index 变量,cfquery result 和 cfhttp result 变量,以及 cfsavecontent 变量名。
    猜你喜欢
    • 2012-08-15
    • 2014-12-28
    • 2014-01-28
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-04
    相关资源
    最近更新 更多