如何在coldfusion中使用CFQuery执行2个或更多插入语句?

CFU*_*ser 5 coldfusion cfquery

是否可以使用执行2插入或更新语句cfquery

如果有,怎么样?

如果不是,通过只打开一个到DB的连接,在Coldfusion中执行多个查询的最佳方法是什么.

我想我们每次打电话cfquery都打开新的连接数据库

Lei*_*igh 5

是否可以使用cfquery执行2插入或更新语句?

很可能是的.但是,您是否可以运行多个语句取决于您的数据库类型和驱动程序/连接设置.例如,在创建MS SQL数据源时,默认情况下允许IIRC多个语句.而MySQL驱动程序通常默认禁用多个语句.那是为了避免sql注入.因此,在这种情况下,您必须在连接设置中明确启用多个语句.否则,您不能使用多个语句.还有一些数据库(通常是像MS Access这样的桌面数据库)根本不支持多个语句.所以我不认为这个问题有一个全面的答案.

如果两个插入/更新语句是相关的,你肯定应该像Sam建议的那样使用cftransaction.这确保了语句被视为一个单元:即它们都成功或者都失败了.因此,您不会留下部分或不一致的数据.为了实现这一点,单个连接将用于事务中的两个查询.

我想每当我们调用cfquery时,我们都会打开新的连接数据库

正如Sam所说,这取决于你的设置以及你是否正在使用cftransaction.如果启用"维护连接"(在CF管理员的"数据源"设置下),CF将维护一个打开的连接池.因此,当您运行查询时,CF只会从池中获取打开的连接,而不是每次都打开一个新连接.使用cftransaction时,应对所有查询使用相同的连接.无论是否启用维护连接.


Sam*_*mer 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>
Run Code Online (Sandbox Code Playgroud)

并且始终始终对用户提交的值使用 cfqueryparam。