0

「複雑なオブジェクト タイプは単純な値に変換できません。」というメッセージが表示されます。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#
4

2 に答える 2

8

完全なエラーの詳細は何ですか? それは具体的にクエリを指していますか、それとも単にクエリに近い行の1つを指しているので、クエリに問題があると思い込んでいますか。

(これまでに投稿した内容には、これがクエリの問題であるとは書かれていません。)

いずれにせよ、クエリは現在 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 (通常、すべての動的変数で使用する必要がありますが、特にクライアント提供の変数で使用する必要があります) と同様に、2 つの変数はurlスコープが設定されていることに注意してください。単純でない変数として、他のスコープに存在します)。

于 2012-06-25T21:58:46.637 に答える
-3

すべての助けに感謝しますが、答えは operatorId の名前を変更する必要があることが判明しました。なぜそれが機能したのかはわかりませんが、CF がそれを予約語と見なしていると思われます。

于 2012-06-26T14:04:19.560 に答える