2016-05-10 2 views
5

Я следующий запрос в ColdFusion:Как найти количество строк, влияющих на инструкцию INSERT INTO в ColdFusion и базе данных MySql?

<cfquery name="test" datasource="test"> 
    INSERT INTO test (id,name) VALUES (1,"santy"),(2,"raj"),(3,"nil") 
</cfquery> 

Я хочу, чтобы найти число изменяемых строк сосчитать. Есть ли способ найти это в ColdFusion?

+2

Укажите сервер базы данных, который вы используете. Решения могут отличаться в зависимости от этого. Было бы полезно, если бы другие посетили эту страницу. – Pankaj

+0

@ Pankaj Да, конечно, спасибо за предложение. –

ответ

7
<cftransaction> 
    <cfquery name="test" datasource="test"> 
     INSERT INTO test (id,name) VALUES (1,"santy"),(2,"raj"),(3,"nil") 
    </cfquery> 
    <cfquery name="test1" datasource="test"> 
     SELECT ROW_COUNT() AS numberOfRowsAffected 
    </cfquery> 
</cftransaction> 
<cfdump var="#test1.numberOfRowsAffected#"> 

Или

Вы можете внести изменения в настройках, чтобы позволить несколько операторов SQL жгутов один cfquery. Чтобы это произошло, внесите изменения, как указано ниже:

В ColdFusion Admin перейдите к форме определения источника данных и добавьте allowMultiQueries = true в строку «Строка подключения». Как только вы это сделаете, вы можете передать несколько запросов с разделителями с запятой в одном теге CFQUERY. Просто убедитесь, что вы используете CFQUERYPARAM для экранирования для SQL Injection Attacks.

+0

Спасибо @tushar, он работает отлично. –

+0

@Tushar Ницца! Не знал об этом. – Pankaj

+0

Серьезно, я всегда думал, что переменная-объект в атрибуте 'result' содержит всю информацию о выполнении этого запроса, но оказывается, что' MySQL' ведет себя по-другому. Очень полезный и творческий ответ @Tushar – Anurag

2

Используйте атрибут result, а затем получите доступ к ключу recordCount.

<cfquery result="myResult" datasource="test"> 
    INSERT INTO test (id,name) VALUES (1,"santy"),(2,"raj"),(3,"nil") 
</cfquery> 

<cfdump var="#myResult.recordCount#"> 
+1

Он всегда дает результат как 1. Даже если есть число строк, на которые влияет инструкция insert. –

+0

@JohnWhish, В идеале это должно работать, но на некоторых базах это не так. –

+1

@SantoshDahifale Он должен работать. Какую базу данных вы используете? – Beginner

4

Попробуйте этот.

<cfquery datasource="test" result="myResult"> 
    INSERT INTO test (id,name) VALUES (1,"santy"),(2,"raj"),(3,"nil") 
</cfquery> 
<cfset getNumberOfRecords = listLen(#myResult.generated_key#)> 
<cfdump var="#getNumberOfRecords#"> 

myResult.generated_key содержит список сгенерированных идентификаторов, поэтому мы можем найти, сколько строк были вставлены, когда мы используем listLen() функции.

+0

Это 'MySQL' решение @GunvantW. Но работает ли он и на обновление? – Anurag

+0

Существует полное решение, на которое стоит обратить внимание: http://stackoverflow.com/a/7861180/3098962 – Anurag

+0

Это будет работать только при вставке записей. @Anurag –