是否可以使用cfquery
執行2插入或更新語句?如何在Coldfusion中使用CFQuery執行2個或多個插入語句?
如果是的話如何?
如果不是,通過打開一個連接到數據庫,在Coldfusion中執行多個查詢的最佳方法是什麼?
我認爲每一個我們稱之爲cfquery
一次我們打開新的連接DB
是否可以使用cfquery
執行2插入或更新語句?如何在Coldfusion中使用CFQuery執行2個或多個插入語句?
如果是的話如何?
如果不是,通過打開一個連接到數據庫,在Coldfusion中執行多個查詢的最佳方法是什麼?
我認爲每一個我們稱之爲cfquery
一次我們打開新的連接DB
內的數據源設置,你可以告訴它是否保持打開狀態,或不符合維護連接設置。
由於擔心SQL注入,我相信ColdFusion 8數據源的設置一次只能運行一個查詢。要改變這一點,你需要修改連接字符串。
最好的辦法是打開保持連接,並在需要使用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。
我沒有CF服務器嘗試,但它應該工作正常IIRC。
類似:
<cfquery name="doubleInsert" datasource="dsn">
insert into table1 values(x,y,z)
insert into table1 values(a,b,c)
</cfquery>
,如果你想更具體的例子中,你將不得不放棄更多的具體信息。
編輯:感謝@SamFarmer:新版本的CF比我已經使用會妨礙其
可能需要那些語句之間分號。 – ale 2009-12-10 19:02:09
是否可以執行2插入或 使用cfquery的更新語句?
最有可能的是。但是否可以運行多個語句取決於您的數據庫類型和驅動程序/連接設置。例如,當您創建MS SQL數據源時,默認情況下允許IIRC多個語句。而MySQL驅動程序通常會在默認情況下禁用多個語句。這是爲了避免sql注入。所以在這種情況下,您必須在連接設置中明確啓用多個語句。否則,你不能使用多個語句。還有一些數據庫(通常是像MS Access這樣的桌面數據庫)根本不支持多種語句。所以我不認爲這個問題有一個全面的答案。
如果兩個插入/更新語句是相關的,那麼您應該像Sam建議的那樣使用cftransaction。這確保了這些陳述被視爲一個單一的單元:即它們全部成功或者全部失敗。所以你不會留下部分或不一致的數據。爲了做到這一點,一個連接將用於交易中的兩個查詢。
我認爲每一個我們稱之爲CFQUERY時候我們 正在打開新的連接DB
薩姆提到的,這就要看你的設置,無論您是使用cftransaction。如果啓用維護連接(在CF管理員的數據源設置下),CF將維護一個開放連接池。所以當你運行一個查詢時,CF只是從池中獲取一個打開的連接,而不是每次都打開一個新連接。使用cftransaction時,應該對所有查詢使用相同的連接。不管是否啓用維護連接。
使用CFTRANSACTION將多個查詢分組到一個單元中。
任何使用CFQUERY執行並置於和標記之間的查詢都被視爲單個事務。在事務塊中的所有操作都已成功執行之前,這些查詢請求的數據更改不會提交到數據庫。如果在查詢中發生錯誤,則事務塊中先前查詢所做的所有更改都會回滾。
使用ISOLATION屬性可以額外控制數據庫引擎在事務期間如何執行鎖定。
欲瞭解更多信息,請訪問http://www.adobe.com/livedocs/coldfusion/5.0/CFML_Reference/Tags103.htm
很抱歉的死靈(我是新來的網站)。
你沒有提到你使用的數據庫。如果你碰巧使用mySQL,你可以添加儘可能多的記錄,最大堆大小將允許。
我經常在與默認堆大小一次插入多達〜4500條記錄(但會取決於你的數據量)。 ('a','b','c'),('d','e','f'),('g','h)插入到您的表格(x,y,z) ','i')
所有數據庫都應該這樣做IMO。
HTH
適用於Apache Derby。 – 2010-09-02 13:41:02
CF8中的mySQL驅動程序現在允許多個語句。 薩姆說,你可以使用把多項語句一起 或在ColdFusion管理員|數據&服務|數據源, 添加 allowMultiQueries =真 到連接字符串字段
HI,Sam感謝您的迴應,您能告訴我在Coldfusion中保持Connection設置的位置在哪裏? 這是真的如果我打電話 2次,它會像打開數據庫連接2次? –
CFUser
2009-12-10 18:52:24
您可以根據需要在單個cfquery中運行儘可能多的SQL語句,甚至可以跳過物理數據庫。 – 2009-12-10 20:04:56
@Sam - 您可以詳細解釋「一次只運行一個查詢」嗎?我從來沒有聽說過這樣的事情。只需在驅動程序/連接級別設置默認限制。 – Leigh 2009-12-10 20:54:22