当查询列是变量时从cfquery获取值

时间:2011-10-05 15:06:35

标签: coldfusion cfquery cfloop

我被卡住了......不记得如何使这项工作。代码:

<cfquery name = "getsomething>
   select a, b, c
   from d
   where id = '1'
</cfquery>
<cfloop collection="#arguments#" item="argument">
    <cfif #StructFind(arguments, argument)# neq #getsomething.argument[0]#><!--- here's the problem --->
        do something
    </cfif>
</cfloop>

查询返回一条记录;我需要获取该记录的每列的值。列名是变量(参数)。我需要什么语法来替换

 #getsomething.argument[0]#

?感谢。

1 个答案:

答案 0 :(得分:7)

您需要进行一些调整:

我看到你正在使用“集合”参数进行循环。这意味着你有一个像这样的数据结构:

<cfset arguments = StructNew() />
<cfset arguments.a = 'x' />
<cfset arguments.b = 'y' />
<cfset arguments.c = 'c' />

在这种情况下,您可以看到值无关紧要 - 重要的是通过使用“collection”参数,您正在使用结构。有些不正确,但让我们继续前进。

您不希望动态评估参数的值,您希望 - 它们映射到您的列,因此循环如下:

<cfloop list="#StructKeyList(arguments)#" index="argument">

然后,以下代码有效:

<cfif StructFind(arguments, argument) neq getsomething[argument][1]>

请注意,在这个答案中,我已将查询索引从0更改为1:cfquery数组是从1开始的,因此第一行不是[0],而是[1]。