2016-05-10 13 views
5

Ich habe folgende Abfrage in Coldfusion:Wie finden Sie die Anzahl der Zeilen betroffen von INSERT INTO-Anweisung in ColdFusion und MySQL-Datenbank?

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

Ich möchte zählen Anzahl der betroffenen Zeilen zu finden. Gibt es eine Möglichkeit, dies in ColdFusion zu finden?

+2

Bitte erwähnen Sie den von Ihnen verwendeten Datenbankserver. Die Lösungen können davon abweichen. Es wäre hilfreich für andere Besucher dieser Seite. – Pankaj

+0

@ Pankaj Ja sicher und danke für den Vorschlag. –

Antwort

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#"> 

Oder

Sie können in den Einstellungen Änderungen vornehmen, mehrere SQL-Anweisungen withing ein cfquery zu ermöglichen. Nehmen Sie die folgenden Änderungen vor, um dies zu erreichen:

Wechseln Sie in ColdFusion Admin zu Ihrem Datenquellen-Definitionsformular und fügen Sie allowMultiQueries = true in das Feld Verbindungszeichenfolge ein. Sobald Sie das getan haben, können Sie mehrere Semikolon getrennte Abfragen in einem einzigen CFQUERY-Tag übergeben. Stellen Sie nur sicher, dass Sie CFQUERYPARAM verwenden, um nach SQL Injection Attacks zu suchen.

+0

Dank @tushar funktioniert es einwandfrei. –

+0

@Tushar Nice one! Ich wusste nichts davon. – Pankaj

+0

Im Ernst, ich dachte immer, dass das variable Objekt im'Ergebnis'-Attribut alle Informationen über die Ausführung dieser Abfrage enthält, aber sich herausstellt, dass 'MySQL' sich anders verhält. Sehr hilfreiche und kreative Antwort @Tushar – Anurag

2

Verwenden Sie das Attribut result, und greifen Sie dann auf den Schlüssel recordCount des Ergebnisses zu.

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

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

Es wird immer Ergebnis als 1 geben. Auch wenn n Reihe Zeilen von Insert-Anweisung betroffen sind. –

+0

@ JohnWhish, sollte dies idealerweise funktionieren, aber auf einigen Datenbanken nicht. –

+1

@SantoshDahifale Es sollte funktionieren. Welche Datenbank verwendest du? – Beginner

4

Versuchen Sie diese.

<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 enthält die Liste der erzeugten IDs, so können wir feststellen, wie viele Zeilen eingefügt wurden, wenn wir listLen() Funktion verwenden.

+0

Das ist 'MySQL' Lösung @GunvantW. Aber funktioniert es auch für das Update? – Anurag

+0

Es gibt eine komplette Lösung, die es wert ist, in Betracht gezogen zu werden: http://stackoverflow.com/a/7861180/3098962 – Anurag

+0

Das wird nur funktionieren, wenn wir Datensätze einfügen. @Anurag –