1

以下のように cfquery を使用して Update Query を起動しようとしています

   <cfquery name = "UpdateRecord"   
            dataSource = #DATASOURCE#   
            username = #DBUSER#   
            password = #DBPASSWORD# 
            result="updateResult" >  
        update table1 
set field1=( select field1 from table2 where field3='Some Value')
 where field4='someothervalue'
     </cfquery> 
    <cfdump var="#UpdateResult#">

しかし、このページを実行すると、ページが読み込まれず、ステータスバーに長い間読み込まれていることがわかります。

しかし、次のような単純な更新クエリを使用すると

update table1 set field1='abc' where field4='someothervalue'

その後、正常に動作しています

cfqueryを使用して上記のようなクエリを実行する方法を知っている人はいますか?

ありがとう

4

3 に答える 3

2

値に cfqueryparam を使用してみることができれば、PreserveSingleQuotes を使用する必要はありません。また、SQL インジェクションから保護します。

于 2009-12-23T05:43:09.953 に答える
1

アップデートを PreserveSingleQuotes 内にラップしようとしましたか?

 <cfquery name = "UpdateRecord"   
        dataSource = #DATASOURCE#   
        username = #DBUSER#   
        password = #DBPASSWORD# 
        result="updateResult" >  
   #PreserveSingleQuotes(update table1 set field1=( select field1 from
   table2 where Field3='Some Value') where field4='someothervalue')#
 </cfquery> 
于 2009-12-23T04:46:49.703 に答える
0

subselectステートメントが1行を返していることを確認してください。実行しているRDMSによって異なりますが、すべてのデータベースがこの機能をサポートしているわけではないと確信しています。最初にデータベースで直接クエリを実行して、正しく実行されるかどうかを確認します。

クエリの最後に制限1を設定するか、データベースがフィールド1を集約でラップすることをサポートしていない場合は、SQLが1行のみを返すように強制できる場合があります。

SELECT MAX(field1) FROM table2 WHERE field3 = 'Some Value'

注:文字列値がユーザーからのパラメーターである場合は、SQLインジェクションから保護するためにcfqueryparamを使用する必要があります。

于 2009-12-23T03:25:07.157 に答える