質問

私は

以下のようにcfqueryタグを使用して更新クエリを発射しようとしています
   <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タグを使用して上記のようなクエリを実行することができますアイデアを持っていることはできますか?

おかげ

役に立ちましたか?

解決

あなたが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> 

他のヒント

あなたは自分の価値観のためでcfqueryparamを使用してみてくださいすることができますし、PreserveSingleQuotesを使用する必要がない場合。また、SQLインジェクションから保護します。

あなたは必ずあなたの副選択ステートメントは、1行を返しています。それはあなたが実行している何RDMSをによって異なりますが、私はすべてのデータベースがこの機能をサポートしていないかなり確信しています。私はそれが正しく実行されている場合最初に確認するために、データベースに直接クエリを実行してみたい。

あなたは、クエリの終わりに制限1を置くことによってのみ、1行を返すために、SQLを強制することができるかもしれない、またはデータベースは、それが合計でフィールド1ラップをサポートしていない場合ます。

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

注:文字列値は、ユーザからのパラメータであれば、あなたはSQLインジェクションから保護するためでcfqueryparamを使用するようにしてください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top