我的目标是只输出"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)
如果不给我一个错误,这不应该工作吗?我觉得我只是在忽略一些简单的事情,我无法在任何地方找到答案.
好的,我看到你修改了你的初始代码,所以这是我的回答:
您循环遍历列列表,并尝试评估每个列,就好像它是结构中的单个元素一样.
但是,查询略有不同:它作为一系列结构进行访问,而这些结构又是数组 - 从查询返回时每行数据.
如果你想输出所有的数据行,而不是预先知道列(或者像你在上面的代码中暗示的那样动态传递它们),试试这个:
<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)
使用此语法比循环中的上述循环稍微便宜一些.
| 归档时间: |
|
| 查看次数: |
8968 次 |
| 最近记录: |