質問

で実行可能で2insertやUpdateを使用 cfquery?

そしていかがですか?

ていない場合は、何が最良の方法を実行す複数のクエリにColdfusion、一つだけ接続をDBです。

と思いま話 cfquery 私たちは新しい接続DB

役に立ちましたか?

解決

データソース設定内では維持接続設定でオープンな接続を維持するかどうか、それを伝えることができます。

を皮切りに、私は、ColdFusion 8つのデータソースがSQLインジェクションとの懸念のために一度に一つだけのクエリを実行するように設定されている、と信じています。これを変更するには、接続文字列を変更する必要があります。

あなたの最善の策は、接続を維持オンにすることであり、必要に応じて使用したcftransactionの場合:

<cftransaction>
<cfquery name="ins" datasource="dsn">
insert into table1 values(<cfqueryparam value="#url.x#">)
</cfquery>
<cfquery name="ins" datasource="dsn">
insert into table2 values(<cfqueryparam value="#url.x#">)
</cfquery>
</cftransaction>

そして常に、常にユーザーによって送信された値のためでcfqueryparamを使用します。

他のヒント

  

これは2のインサートを実行したりすることが可能です   cfqueryタグを使用してUPDATEステートメント?

ほとんどの場合はい。しかし、あなたは複数のステートメントを実行できるかどうか、あなたのデータベースタイプおよびドライバ/接続の設定によって決定されます。あなたがMS SQLデータソースを作成するときに、例えば、IIRC複数のステートメントがデフォルトで許可されています。一方、MySQLのドライバは、多くの場合、デフォルトではの無効化の複数の文を。これは、SQLインジェクションを避けるのを助けることです。だから、その場合は、あなたの接続設定で明示的に複数のステートメントを有効にするために必要があります。そうしないと、複数のステートメントを使用することはできません。全てで複数のステートメントをサポートしていない一部のデータベース(MS Accessのよう通常のデスクトップのもの)もあります。だから私はこの質問へのブランケット答えはないと思います。

2挿入/更新文が関連している場合は、サムが示唆されているように、

、あなたは間違いなくたcftransactionを使用する必要があります。どちらか彼らはすべてが成功するか、それらはすべて失敗すなわち:それは文は、単一のユニットとして扱われる保証します。だから、部分的または一貫性のないデータが残されていません。それを達成するために、単一の接続は、トランザクション内の両方のクエリに使用されるであろう。

  

私たちは、私たちのcfqueryを呼び出すたびに考えます   

新しい接続DBを開いています

サムが述べたように、それはあなたの設定に依存し、あなたがたcftransactionを使用しているかどうか。あなたは(CF Administratorのデータソースの設定の下で)接続を維持する有効にした場合、CFは、オープン接続のプールを維持します。クエリを実行するときに、CFだけではなく、新しいものを毎回開くよりも、プールからオープン接続をつかみます。たcftransactionを使用する場合は、同じ接続は、すべてのクエリのために使用すべきです。かかわらず、接続を維持するかどうかのが有効かされていません。

mySQLドライバー CF8は複数記述です。サムは、利用できる グループの多くの諸表の一 または、coldfusion管理|データ-サービス|データ源 追加 allowMultiQueries=true への接続文字列分野

私がしようとするCFサーバーを持っていないが、それは罰金IIRCを動作する必要があります。

のような何かます:

<cfquery name="doubleInsert" datasource="dsn">
insert into table1 values(x,y,z)
insert into table1 values(a,b,c)
</cfquery>
あなたはより具体的な例をしたい場合は、より具体的な情報を提供する必要があります。

編集の@SamFarmerに感謝:私はこれを防ぐことが使用しているよりも、CFの新しいバージョン

しまいまして申し訳ありません刀んのサイト)

んだろうDBいます。せてもらう良い機会になりそうだmySQLを追加できる多くの記録としての最大ヒープサイズを与えることができます。

私は定期的に挿入~4500件のデータのデフォルトのヒープサイズのもの(ただの量のデータを保存します).

挿入yourTable(x,y,z)VALUES('a','b','c'),('d'、'e'、'f'),('g','h'、'i')

すべてのDBsをなすべきことと思う。

HTH

単一のユニットにグループ複数のクエリに使用CFTRANSACTION。

任意のクエリCFQUERYで実行との間に配置し、タグが単一のトランザクションとして処理されます。トランザクションブロック内のすべてのアクションが正常に実行されるまで、これらのクエリによって要求されたデータへの変更がデータベースにコミットされていません。エラーがクエリで発生した場合、トランザクションブロック内で以前のクエリによって行われたすべての変更がロールバックされます。

データベースエンジンはトランザクション中にロック行う方法をさらに制御するための分離属性を使用します。

より多くの情報をご覧ください http://www.adobe.com /livedocs/coldfusion/5.0/CFML_Reference/Tags103.htmする

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