Как Выполниться 2 или больше, вставляют операторы с помощью CFQuery в coldfusion?

Всегда используйте многослойную пантомиму и обеспечьте альтернативу простого текста.

5
задан CFUser 10 December 2009 в 18:19
поделиться

5 ответов

Within the data source settings you can tell it whether to keep connections open or not with the Maintain Connections setting.

Starting with, I believe, ColdFusion 8 datasources are set up to run only one query at a time due to concerns with SQL injection. To change this you would need to modify with the connection string.

Your best bet is to turn on Maintain Connections and if needed use 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>

And always, always use cfqueryparam for values submitted by users.

4
ответ дан 18 December 2019 в 09:50
поделиться

I don't have CF server to try, but it should work fine IIRC.

something like:

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

if you want a more specific example you will have to give more specific information.

Edit: Thanks to @SamFarmer : Newer versions of CF than I have used may prevent this

3
ответ дан 18 December 2019 в 09:50
поделиться

Можно ли выполнить 2 вставки или Обновить операторы с помощью cfquery?

Скорее всего, да. Но то, можете ли вы запускать несколько операторов, зависит от типа вашей базы данных и настроек драйвера / подключения. Например, когда вы создаете источник данных MS SQL, по умолчанию разрешены несколько операторов IIRC. В то время как драйверы MySQL часто отключают несколько операторов по умолчанию. Это поможет избежать внедрения sql. Поэтому в этом случае вы должны явно включить несколько операторов в настройках подключения. В противном случае вы не можете использовать несколько операторов. Есть также некоторые базы данных (обычно настольные, такие как MS Access), которые вообще не поддерживают несколько операторов. Поэтому я не думаю, что на этот вопрос есть однозначный ответ.

Если два оператора вставки / обновления связаны, вам определенно следует использовать cftransaction, как предложил Сэм. Это гарантирует, что операторы обрабатываются как единое целое: т.е. либо все они успешны, либо все терпят неудачу. Таким образом, вы не останетесь с частичными или противоречивыми данными. Для этого для обоих запросов в транзакции будет использоваться одно соединение.

Думаю, каждый раз, когда мы вызываем cfquery, мы открывают новую базу данных подключения

Как сказал Сэм, это зависит от ваших настроек и от того, используете ли вы cftransaction. Если вы включите «Поддерживать подключения» (в настройках «Источник данных» в CF Administrator) CF будет поддерживать пул открытых подключений. Поэтому, когда вы запускаете запрос, CF просто захватывает открытое соединение из пула, а не каждый раз открывает новое. При использовании cftransaction для всех запросов следует использовать одно и то же соединение. Независимо от того, включено ли Поддержание подключений или нет.

5
ответ дан 18 December 2019 в 09:50
поделиться

Используйте CFTRANSACTION для группировки нескольких запросов в один блок.

Любые запросы, выполненные с помощью CFQUERY и размещенные между тегами и тегами, рассматриваются как одна транзакция. Изменения данных, запрашиваемых этими запросами, не фиксируются в БД до тех пор, пока все действия внутри блока транзакций не будут выполнены успешно. В случае ошибки в запросе все изменения, внесенные предыдущими запросами внутри блока транзакций, откатываются.

Используйте атрибут ISOLATION для дополнительного контроля над тем, как движок БД выполняет блокировку во время транзакции.

Подробнее см. в http://www.adobe.com/livedocs/coldfusion/5.0/CFML_Reference/Tags103.htm

0
ответ дан 18 December 2019 в 09:50
поделиться

Извините за некро (я новичок на сайте).

Ты не упомянул, какой DB ты используешь. Если вы случайно используете mySQL, вы можете добавить столько записей, сколько позволит максимальный размер кучи.

Я регулярно вставляю до ~4500 записей одновременно с размером кучи по умолчанию (но это будет зависеть от количества данных, которые у вас есть).

INSERT INTO yourTable (x,y,z) VALUES ('a','b','c'),('d','e','f'),('g','h','i')

Все БД должны делать это IMO.

HTH

1
ответ дан 18 December 2019 в 09:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: