Rus*_*Uhl 1 variables coldfusion nested
编辑:问题是重复的,但答案不是!
我有以下代码:
<cfquery name="contact" datasource="thesource">
SELECT * FROM #table# WHERE foo = '#bar#'
</cfquery>
Run Code Online (Sandbox Code Playgroud)
然后是(这是问题部分):
<cfloop from="0" to="9" index="i">
<cfset thisvar = Evaluate("contact.check" & i) />
<cfoutput>
#thisvar#
</cfoutput>
</cfloop>
Run Code Online (Sandbox Code Playgroud)
在执行时,它会抛出一个很好的大"变量contact.check0未定义".但是,#contact.check0#如果硬编码,输出会很好.
有想法该怎么解决这个吗?
注意:我在循环访问数据库查询结果时看到了Coldfusion - 变量字段名称,虽然问题似乎完全相同,但解决方案不起作用.根据评论,我也得到一个"无法转换为数字"的错误.我注意到Tomalak提到"有点抓",但从来没有说过它是什么.在他链接到的文章中,我尝试了每个语法上等效的形式,并且它都会抛出错误...要么无法转换为数字,要么未定义.
此外,我知道Evaluate()有开销和"不应该使用".我会采取任何有效的解决方案,无论是否有评估.
这是在ColdFusion 9上.
谢谢
编辑:虽然类似的问题已经有了答案,但这个问题有不同的原因.见下面接受的答案.
首先,关于逃避投入的标准俱乐部.cfqueryparam存在是有原因的.除此之外,您无需评估即可完成此操作.试试这个,包括检查以确保实际有结果
<!--- make sure that there is actually a result --->
<cfif contact.RecordCount EQ 0>
NO RESULT
<cfelse>
<cfloop from="0" to="9" index="i">
<!--- assumes that you want row 1 --->
<!--- check.CurrentRow could also be used instead of 1 --->
<cfset thisvar = contact['check'&i][1] />
<cfoutput>
#thisvar#
</cfoutput>
</cfloop>
</cfif>
Run Code Online (Sandbox Code Playgroud)
我怀疑它是在尝试评估列而没有指定行号,而在硬编码时你会发现它使用当前行.
编辑 Dan Bracuk指出这与您在问题中链接的问题完全相同,Coldfusion - 循环数据库查询结果时的变量字段名称