【发布时间】:2015-02-06 13:21:01
【问题描述】:
我需要在表格的最后一列中提供表格中项目的一些状态。 首先,我去查询一张表,看看我是否有对该项目的确认。
<cfquery name="focnotice" datasource="******" result="FocResult">
SELECT ecspc
FROM tbl_CNR_H
WHERE icsc = '#myarray[i].ICSC#'
AND asr_no = '#myarray[i].ASR#'
</cfquery>
ECSPC 是我的表中的一个字段,所以逻辑是看是否有记录。如果是这样,请查看 ECSPC 值是否不同于“”。如果是,请查询另一个表以查看此 ECSPC 是否存在匹配记录。
<cfset ISUPStatus = "#focnotice.ecspc#">
<cfif ISUPStatus NEQ "">
<cfquery name="isupStatus" datasource="******" result="ISUPResult">
select *
from tbl_ISUP
where dpc = '#ISUPStatus#'
</cfquery>
<cfset isupcount = #ISUPResult.RecordCount#>
<cfif #isupcount# GT 0>
<cfset ISUPorder = "Yes">
<cfelse>
<cfset ISUPorder = "No">
</cfif>
<cfelse>
<cfset ISUPorder = "No">
</cfif>
我在调试中收到以下错误
复杂对象类型不能转换为简单值。
表达式请求了一个变量或一个中间表达式 结果作为一个简单的值。但是,结果不能转换为 简单的价值。简单值是字符串、数字、布尔值和 日期/时间值。查询、数组和 COM 对象是 复杂的价值观。错误的最可能原因是您尝试过 将复杂值用作简单值。例如,您尝试使用 cfif 标记中的查询变量。
我在这里错过了什么?
【问题讨论】:
-
究竟是哪一行引发了错误?为什么不直接使用 sql JOIN 而不是所有的 if/else 逻辑?
-
我正在查看您的问题,但一些明显的编码问题让我想对它们发表评论:1.
(注意引号和哈希) 5. 使用 ,不要使用“*” - 而是使用列名 9. (注意哈希) 10. (注意速记和哈希) -
好的,我发现了问题,这是由于我这边的糟糕编码造成的。我使用了
并将新查询命名为 cfquery name="isupStatus" 这就是问题所在。原来它要么是“”,要么有一个值,但是一旦我使用相同的名称作为查询名称,它就变得复杂了,我不能再只显示它了。所以我改变了查询名称,它完成了工作并按预期工作 -
您应该考虑改进代码的其他一些事情 1) 使用 JOIN 而不是所有 if/else 逻辑会大大简化代码 2) 始终在可变查询参数上使用
cfqueryparam.特别是在多次执行的查询上。它使用绑定变量来提高性能,更重要的是保护您的数据库免受 sql 注入。