我得到“复杂对象类型无法转换为简单值。”locationId和/或operatorId通过url发送,并且始终是一个简单的数字('304')。这是查询的代码:
select *
from table1, table2
where table1.u_construct_id(+)=table2.u_construct_id
and table1.LOCATION_ID = #locationId#
and table1.OPERATOR_ID = #operatorId#
答案 0 :(得分:8)
完整 错误详情有哪些?它是否专门指向查询,或者只是指向查询附近的一行,这导致您假设查询有错。
(到目前为止,您发布的内容中没有任何内容表明这是一个查询问题。)
在任何情况下,您的查询当前都会受到SQL注入的影响,应该更改为:
select *
from table1, table2
where table1.u_construct_id (+)= table2.u_construct_id
and table1.LOCATION_ID = <cfqueryparam value="#url.locationId#" cfsqltype="cf_sql_integer" />
and table1.OPERATOR_ID = <cfqueryparam value="#url.operatorId#" cfsqltype="cf_sql_integer" />
请注意,除了cfqueryparam(通常应该用于所有动态变量,尤其是客户端提供的变量),这两个变量已经url
作用域,并且可能正确地确定了变量的范围是修复(如果其他范围中存在locationId或operatorId,则为非简单变量)。
答案 1 :(得分:-3)
感谢所有帮助,但答案结果是必须重命名operatorId。不知道为什么会起作用,但怀疑CF认为这是一个保留的术语。