使用StructKeyExists代替IsDefined

时间:2014-02-08 17:59:56

标签: coldfusion struct

出于代码增强目的,我们会将所有isDefined()次来电转换为structKeyExists()。我需要知道的几件事情是:

我们如何在structKeyExists()中定义查询?例如:

<cfquery name="getname" datasource="dsn">select * from table</cfquery>

<cfif isDefined('getname') and getname.recordcount neq "">Do this</cfif>

由于没有为isDefined()定义范围,我们应该在structkeyExists()使用什么范围?

2 个答案:

答案 0 :(得分:12)

默认范围是变量,因此StructKeyExists(variables,"getname")会为您执行检查。

但是,除非上面的示例中缺少逻辑,否则您不需要isDefined / StructKeyExists检查,因为如果您运行查询,它将始终被定义,只是没有行存在,所以您的第二次检查getname.recordcount就足够了。

答案 1 :(得分:0)

这是一个较老的问题,但对于子孙后代。

<cfquery name="getname" datasource="dsn">
    select * from table
</cfquery>

<cfif getname.recordcount>Do this</cfif>

cfif getname.recordcount用作布尔检查。如果结果集没有带来任何结果,那么它将失败...如果它带回的记录比满足布尔检查的记录要好。

扩展。假设我们正在选择一个特定字段,如id,我们希望为这两种情况提供输出:

看起来像这样:

<cfquery name="getname" datasource="dsn">
    select id from table
</cfquery>


<cfif getname.recordcount>
    <cfoutput query="getname">
    #id#<br>
    </cfoutput>
<cfelse>    
    No records found.    
</cfif>