Var 范围问题可能?
Var scoping issue possibly?
在我的函数中有几次我有这样的东西:
<cffunction name="mergeData">
<cfquery name="myQuery">
SELECT columnName FROM tableName
</cfquery>
<cfquery dbtype="query" name="myOtherQuery">
SELECT columnName FROM myQuery
</cfquery>
</cffunction>
<cfset resulta = mergeData(queryA) />
<cfset resultb = mergeData(queryB) />
<cfset resultc = mergeData(queryC) />
偶尔我会得到错误The select column reference [myQuery.columnname] is not found in table [myQuery].
那么可能是什么原因造成的。我该如何诊断。我当时认为这可能是一个范围问题,所以我要添加 <cfquery name="local.myQuery">
只是为了确保函数中包含一些东西(无论如何我都应该这样做)。但是,当某些事情只发生时,有时我很难弄清楚如何诊断。
编辑:更清楚地说明了为什么它最有可能是范围界定问题。我的想法是 myQuery
可能在其他调用中被引用。我的意思是,这不像是 运行 数据上的多个线程,但这可能是原因吗?还有其他原因吗?当我收到错误时,情况并非总是如此。我也在一个页面上找到它,它的功能只有 运行 一次。
我从来没有使用 LOCAL 来处理函数中的查询。
所以我这样做....
<cffunction>
<cfquery name="VARIABLES.myQuery">
SELECT columnName FROM tableName
</cfquery>
<cfquery dbtype="query" name="myOtherQuery">
SELECT columnName FROM VARIABLES.myQuery
</cfquery>
<cffunction>
我强烈建议为您的查询使用更明确的名称,尤其是在查询的查询中。
在查询的查询中,在 local
范围前缀两边使用方括号。
<cffunction name="mergeData">
<cfquery name="local.myQuery">
SELECT columnName FROM tableName
</cfquery>
<cfquery dbtype="query" name="local.myOtherQuery">
SELECT columnName FROM [local].myQuery
</cfquery>
</cffunction>
<cfset resulta = mergeData(queryA) />
<cfset resultb = mergeData(queryB) />
<cfset resultc = mergeData(queryC) />
在我的函数中有几次我有这样的东西:
<cffunction name="mergeData">
<cfquery name="myQuery">
SELECT columnName FROM tableName
</cfquery>
<cfquery dbtype="query" name="myOtherQuery">
SELECT columnName FROM myQuery
</cfquery>
</cffunction>
<cfset resulta = mergeData(queryA) />
<cfset resultb = mergeData(queryB) />
<cfset resultc = mergeData(queryC) />
偶尔我会得到错误The select column reference [myQuery.columnname] is not found in table [myQuery].
那么可能是什么原因造成的。我该如何诊断。我当时认为这可能是一个范围问题,所以我要添加 <cfquery name="local.myQuery">
只是为了确保函数中包含一些东西(无论如何我都应该这样做)。但是,当某些事情只发生时,有时我很难弄清楚如何诊断。
编辑:更清楚地说明了为什么它最有可能是范围界定问题。我的想法是 myQuery
可能在其他调用中被引用。我的意思是,这不像是 运行 数据上的多个线程,但这可能是原因吗?还有其他原因吗?当我收到错误时,情况并非总是如此。我也在一个页面上找到它,它的功能只有 运行 一次。
我从来没有使用 LOCAL 来处理函数中的查询。
所以我这样做....
<cffunction>
<cfquery name="VARIABLES.myQuery">
SELECT columnName FROM tableName
</cfquery>
<cfquery dbtype="query" name="myOtherQuery">
SELECT columnName FROM VARIABLES.myQuery
</cfquery>
<cffunction>
我强烈建议为您的查询使用更明确的名称,尤其是在查询的查询中。
在查询的查询中,在 local
范围前缀两边使用方括号。
<cffunction name="mergeData">
<cfquery name="local.myQuery">
SELECT columnName FROM tableName
</cfquery>
<cfquery dbtype="query" name="local.myOtherQuery">
SELECT columnName FROM [local].myQuery
</cfquery>
</cffunction>
<cfset resulta = mergeData(queryA) />
<cfset resultb = mergeData(queryB) />
<cfset resultc = mergeData(queryC) />