尝试输出查询值时出现复杂对象错误

tim*_*hey 6 coldfusion

我的目标是只输出"fieldList"中指定的列数据.

收到以下错误:

复杂对象类型无法转换为简单值.表达式已请求变量或中间表达式结果作为简单值,但是,结果无法转换为简单值.简单值是字符串,数字,布尔值和日期/时间值.查询,数组和COM对象是复杂值的示例.导致错误的最可能原因是您尝试将复杂值用作简单值.例如,您可能尝试在cfif标记中使用查询变量.错误发生在第20行.

尝试执行以下操作时:

<cfquery datasource="retailers" name="myQuery">
Select * FROM retailer 
WHERE retailer_id = '#url.id#'
</cfquery>

<cfset fieldList = "company,phone,phone_secondary,fax,email,website">
<cfloop list="#fieldList#" index="i">      
#myQuery[i]#
</cfloop>
Run Code Online (Sandbox Code Playgroud)

如果不给我一个错误,这不应该工作吗?我觉得我只是在忽略一些简单的事情,我无法在任何地方找到答案.

Sha*_*mes 8

好的,我看到你修改了你的初始代码,所以这是我的回答:

您循环遍历列列表,并尝试评估每个列,就好像它是结构中的单个元素一样.

但是,查询略有不同:它作为一系列结构进行访问,而这些结构又是数组 - 从查询返回时每行数据.

如果你想输出所有的数据行,而不是预先知道列(或者像你在上面的代码中暗示的那样动态传递它们),试试这个:

<cfoutput query="myQuery">
  <cfloop list="#myQuery.ColumnList#" index="thisColumn">
    #myQuery[thisColumn][myQuery.CurrentRow]#
  </cfloop>
</cfoutput>
Run Code Online (Sandbox Code Playgroud)

这将为您提供所需的输出.带有query属性的外部cfoutput将遍历您收到的所有数据行.然后,对于每一行,您遍历查询生成的列列表,并为每列输出数据,通过myQuery.CurrentRow指定行,该行通过外部输出自动迭代.

我现在还花一点时间来提倡你试图远离循环中的循环,并且只显式地输出你的值:

<cfoutput query="myQuery">
  #company# #phone#
</cfoutput>
Run Code Online (Sandbox Code Playgroud)

使用此语法比循环中的上述循环稍微便宜一些.