【问题标题】:Getting value from cfquery when query column is a variable当查询列是变量时从 cfquery 获取值
【发布时间】:2011-10-05 15:06:35
【问题描述】:

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

<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]#

?谢谢。

【问题讨论】:

    标签: coldfusion cfquery cfloop


    【解决方案1】:

    您需要进行一些调整:

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

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

    您可以看到在这种情况下值并不重要——重要的是通过使用“集合”参数,您正在使用结构。有点不正确,但让我们继续假设。

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

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

    那么,下面的代码就可以工作了:

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

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

    【讨论】:

    • 完美,谢谢。实际上,我之前曾尝试过,但出现“表不能被 FIELDNAMES 索引”错误,这让我大吃一惊——我忘记了 arguments.fieldnames 的存在。
    • @earachefl - 仅供参考,collectionlist 循环都可以。正如 Shawn 演示的那样,使事情顺利进行的关键是为您的查询使用数组表示法。 (尽管您可能想要验证查询不为空以避免出现不同的错误。)“不可索引...”消息通常是一种神秘的方式,表示“查询中不存在该列名”。
    • 很奇怪在这里看到StructFind。更简单:&lt;cfif Arguments[argument] NEQ GetSomething[argument][1] &gt;?
    • 此外,由于可能会传入其他参数,这意味着将尝试检查未知列,因此循环通过 list=#QueryName.ColumnList# 可能更有意义。
    猜你喜欢
    • 2016-07-28
    • 1970-01-01
    • 2022-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    相关资源
    最近更新 更多