0

私はMySQL(5.0.88)へのColdfusion8INSERTに永遠に座っていました

データは、次のように「q」という名前のクエリから取得されました。

[Record # 1] 
ILN_KAEUFER: 9900000002985 
ILN_VERKAEUFER: 9900000003005 

次に、次のようなINSERTを作成します。

<cfloop query="q">
     <cfquery datasource="db">
         INSERT INTO table_a ( 
            iln_kaeufer, 
            iln_verkaeufer
         )
         VALUES(
            "#iln_kaeufer#", 
            "#iln_verkaeufer#"
        )
      </cfquery>
 </cfloop> 

これが私がそれを機能させる唯一の方法です。私は最初に次のように両方の値をスコープしようとしました:

 "#q.iln_kaeufer#", 
 "#q.iln_verkaeufer#"

その前は、cfqueryparamも次のように使用していました。

  <cfqueryparam value="#q.iln_kaeufer#" cfsqltype="cf_sql_varchar" maxlength="13">
  <cfqueryparam value="#q.iln_verkaeufer#" cfsqltype="cf_sql_varchar" maxlength="13">

どちらもエラーが発生しました。

これは以前に尋ねられたと思いますが、CFQUERYPARAMをいつ使用できる/使用すべきか、いつ使用しないか、いつSCOPEを使用するか、いつ使用しないかについての適切な説明が見つかりませんでした。

私はいつもすべてをパラメータ化してスコープを設定しようとしますが、これは私が間違いであると探していた最後のことでした。

いくつかの洞察を流してくれてありがとう!

4

2 に答える 2

3

したがって、変数が見つかるまですべてのスコープをバックトラックする必要があるColdFusionのオーバーヘッドを節約できるため、可能な限りスコープを設定する必要があります。

この場合、データがデータベースから直接取得されている場合でも、cfqueryparamを使用する必要があります。SQLインジェクションに対する保護は、cfqueryparamを使用する利点の1つにすぎません。また、クエリのパフォーマンスにも役立ちます:http: //adamcameroncoldfusion.blogspot.co.uk/2012/07/what-one-can-and-cannot-do-with.html

これは機能するはずです:

<cfloop query="q">
     <cfquery datasource="db">
         INSERT INTO table_a ( 
            iln_kaeufer, 
            iln_verkaeufer
         )
         VALUES(
            <cfqueryparam value="#q.iln_kaeufer#" cfsqltype="cf_sql_varchar" maxlength="13">,  // your code didn't have a comma here when using cfqueryparam?
            <cfqueryparam value="#q.iln_verkaeufer#" cfsqltype="cf_sql_varchar" maxlength="13">
        )
      </cfquery>
 </cfloop> 

そうでない場合は、列のタイプとサイズを確認してください。それでもそうでない場合は、ループしているときに別のクエリ内にクエリがある場合に問題が発生する可能性があります。あなたはそれをループする別の方法を試すことができます:

<cfloop index="i" from="1" to="#q.recordcount#">
  use #q.column[i]#
</cfloop>
于 2012-07-17T12:45:14.303 に答える
0

もちろん、多くの理由から、常に明示的なスコープを使用し、パラメーター化されたクエリ(cfqueryparam)を使用する必要があります。

cfqueryparamを使用すると、SQLインジェクションから保護され、プリペアドステートメントが可能になり、世界がより良い場所になります。正しくスコープを設定するとパフォーマンスが向上する場合がありますが、何よりも優れた方法であり、どの変数がどこから来たのかを把握しようとしないため、コードをより高速に読み取ることができます。

cfqueryparamを使用したmysqlクエリで発生したエラーは何ですか?

于 2012-07-17T12:44:28.140 に答える