2009-12-10 63 views

回答

4

內的數據源設置,你可以告訴它是否保持打開狀態,或不符合維護連接設置。

由於擔心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。

+0

HI,Sam感謝您的迴應,您能告訴我在Coldfusion中保持Connection設置的位置在哪裏? 這是真的如果我打電話 2次,它會像打開數據庫連接2次? – CFUser 2009-12-10 18:52:24

+0

您可以根據需要在單個cfquery中運行儘可能多的SQL語句,甚至可以跳過物理數據庫。 – 2009-12-10 20:04:56

+0

@Sam - 您可以詳細解釋「一次只運行一個查詢」嗎?我從來沒有聽說過這樣的事情。只需在驅動程序/連接級別設置默認限制。 – Leigh 2009-12-10 20:54:22

3

我沒有CF服務器嘗試,但它應該工作正常IIRC。

類似:

<cfquery name="doubleInsert" datasource="dsn"> 
insert into table1 values(x,y,z) 
insert into table1 values(a,b,c) 
</cfquery> 

,如果你想更具體的例子中,你將不得不放棄更多的具體信息。

編輯:感謝@SamFarmer:新版本的CF比我已經使用會妨礙其

+1

可能需要那些語句之間分號。 – ale 2009-12-10 19:02:09

5

是否可以執行2插入或 使用cfquery的更新語句?

最有可能的是。但是否可以運行多個語句取決於您的數據庫類型和驅動程序/連接設置。例如,當您創建MS SQL數據源時,默認情況下允許IIRC多個語句。而MySQL驅動程序通常會在默認情況下禁用多個語句。這是爲了避免sql注入。所以在這種情況下,您必須在連接設置中明確啓用多個語句。否則,你不能使用多個語句。還有一些數據庫(通常是像MS Access這樣的桌面數據庫)根本不支持多種語句。所以我不認爲這個問題有一個全面的答案。

如果兩個插入/更新語句是相關的,那麼您應該像Sam建議的那樣使用cftransaction。這確保了這些陳述被視爲一個單一的單元:即它們全部成功或者全部失敗。所以你不會留下部分或不一致的數據。爲了做到這一點,一個連接將用於交易中的兩個查詢。

我認爲每一個我們稱之爲CFQUERY時候我們 正在打開新的連接DB

薩姆提到的,這就要看你的設置,無論您是使用cftransaction。如果啓用維護連接(在CF管理員的數據源設置下),CF將維護一個開放連接池。所以當你運行一個查詢時,CF只是從池中獲取一個打開的連接,而不是每次都打開一個新連接。使用cftransaction時,應該對所有查詢使用相同的連接。不管是否啓用維護連接。

0

使用CFTRANSACTION將多個查詢分組到一個單元中。

任何使用CFQUERY執行並置於和標記之間的查詢都被視爲單個事務。在事務塊中的所有操作都已成功執行之前,這些查詢請求的數據更改不會提交到數據庫。如果在查詢中發生錯誤,則事務塊中先前查詢所做的所有更改都會回滾。

使用ISOLATION屬性可以額外控制數據庫引擎在事務期間如何執行鎖定。

欲瞭解更多信息,請訪問http://www.adobe.com/livedocs/coldfusion/5.0/CFML_Reference/Tags103.htm

1

很抱歉的死靈(我是新來的網站)。

你沒有提到你使用的數據庫。如果你碰巧使用mySQL,你可以添加儘可能多的記錄,最大堆大小將允許。

我經常在與默認堆大小一次插入多達〜4500條記錄(但會取決於你的數據量)。 ('a','b','c'),('d','e','f'),('g','h)插入到您的表格(x,y,z) ','i')

所有數據庫都應該這樣做IMO。

HTH

+0

適用於Apache Derby。 – 2010-09-02 13:41:02

1

CF8中的mySQL驅動程序現在允許多個語句。 薩姆說,你可以使用把多項語句一起 或在ColdFusion管理員|數據&服務|數據源, 添加 allowMultiQueries =真 到連接字符串字段

相關問題