Sql Coldfusion—循环数据库查询结果时的变量字段名
我在一个表中有一组列名,例如foo1、foo2、foo3、foo4。我希望通过循环动态引用这些列名:Sql Coldfusion—循环数据库查询结果时的变量字段名,sql,variables,coldfusion,Sql,Variables,Coldfusion,我在一个表中有一组列名,例如foo1、foo2、foo3、foo4。我希望通过循环动态引用这些列名: <cfloop index="i" from="1" to="4"> <cfset foo = Evaluate("query.foo" & i)> </cfloop> 上述操作不起作用-ColdFusion抛出“变量未定义”错误,即使query.foo1是对查询结果的有效引用。我还能怎么做呢?你很接近了。试试这个: <cfset qu
<cfloop index="i" from="1" to="4">
<cfset foo = Evaluate("query.foo" & i)>
</cfloop>
上述操作不起作用-ColdFusion抛出“变量未定义”错误,即使query.foo1是对查询结果的有效引用。我还能怎么做呢?你很接近了。试试这个:
<cfset query.foo1 = "foo val 1">
<cfset query.foo2 = "foo val 2">
<cfset query.foo3 = "foo val 3">
<cfset query.foo4 = "foo val 4">
<cfloop index="i" from="1" to="4">
<cfset foo = Evaluate("query.foo#i#")>
<cfoutput>#foo#<br></cfoutput>
</cfloop>
#foo#
不要用Evaluate()
来做类似的事情!它又慢又慢
或者,如果您愿意:
<cfloop index="i" from="1" to="4">
<cfset foo = query["foo#i#"][query.CurrentRow]>
</cfloop>
Evaluate()
用于计算代码位。不要将它用于那些可以用语言集成的、更合适的方式更优雅地解决的事情
编辑:
使用“尖括号”语法访问查询对象时,必须附加(基于1的)行号索引(Query[“foo#i#”][RowNum]
)。使用传统的“点”语法(query.foo1
)时,当前行是隐式的
要显式访问当前行,请使用QueryObject.CurrentRow
属性。但它可以是小于或等于QueryObject.RecordCount
的任何正整数。建议对CurrentRow
以外的任何内容进行范围检查
这打开了一个有趣的领域:您可以开始使用带有“随机访问”的查询对象。以前(在CFMX之前),您所能做的就是从头到尾迭代它们,提取您要查找的内容。现在,它就像一个嵌套的结构/数组数据结构,您可以用不同的方式使用。我知道Evaluate()传统上(即直到CF5)用于此类内容,但由于CF6,它是不必要的,通常不推荐使用。甚至Macromedia/Adobe也不鼓励使用它:太棒了,我没有意识到这一点。谢谢。不幸的是,这两个work-ColdFusion都没有告诉我“值foo1不能转换成数字。”哦,我明白了。等等,关于如何使用尖括号语法处理查询行,有一个小技巧。我在你链接的文档中没有看到这个-有什么建议吗?这个链接对我很有用。CF文档传统上加载有点慢,我认为您需要使用JavaScript。奇怪的是,即使添加了[query.currentrow]语法,我仍然得到“无法转换为数字错误”。
<cfloop index="i" from="1" to="4">
<cfset foo = query["foo#i#"][query.CurrentRow]>
</cfloop>