2009-08-20 10 views
19

Ist das legal?Mehrere mysql INSERT-Anweisungen in einer Abfrage php

$string1= "INSERT INTO....;"; 
$string1 .= "INSERT INTO....;"; 
$string1 .= "INSERT INTO....;"; 
mysql_query($string1) or die(mysql_error()); 
+0

ich mein Problem mehrere Abfrage auf meinem PHP-Projekt mit dieser Methode Mysqli läuft ausgewertete [Mysqli .multi-query.] (http://us2.php.net/manual/en/mysqli.multi-query.php) –

Antwort

0

Nein, sie sind separate Abfragen, und müssen als solche bezeichnet werden.

33

Nein, mysql_query() lässt nur jeweils eine Abfrage zu.

Sie können mehrere Zeilen wie folgt einfügen:

INSERT INTO table (col1, col2) 
VALUES (1, 2), (3, 4), (5, 6) 
+0

Dieser ist besser - es ist wichtig, die Feldnamen anzugeben, in die Sie die Daten ablegen ! – itsricky

2

Im Allgemeinen ist das gültige SQL da jede Anweisung mit einem Semikolon endet, aber PHP ermöglicht es Ihnen nicht mehr als eine Abfrage zu einem Zeitpunkt zu senden, um gegen SQL-Injection-Angriffe zu schützen, die ein ausnutzen könnten schlecht geschriebenes Skript.

Sie können immer noch eine Syntax wie:

INSERT INTO foo VALUES ('a1', 'b1'), ('a2', 'b2'); 
10

Von MySQL Entwickler Unterstützung MySQL dev forum

INSERT INTO table (artist, album, track, length) 
VALUES 
("$artist", "$album", "$track1", "$length1"), 
("$artist", "$album", "$track2", "$length2"), 
("$artist", "$album", "$track3", "$length3"), 
("$artist", "$album", "$track4", "$length4"), 
("$artist", "$album", "$track5", "$length5"); 

So geht so normal wie einfügen immer:

  • zuerst den Tabellennamen zu benennen wo wir neue Zeile einfügen möchten,
  • fol folgt von Spaltennamen in runden Klammern Benennung (Anmerkung: Nicht, wenn Sie benötigten ALLE Spalten eingefügt werden sollen),
  • von VALUES gefolgt Schlüsselnamen und dann kommt in runden Klammern die Werte, die Sie für neue Zeilen eingefügt werden sollen in der obigen Tabelle
  • von Komma und dann ein anderes Paar von runden Klammern mit neuen Werten für die neue Zeile in der genannten Tabelle oben
  • und dies wiederholt N-mal so lang haben Sie die Daten einzufügen.

Happy Einfügen mehrerer Werte mit einer Insert-Anweisung. :)

2

Kopieren/Einfügen Beispiel innerhalb einer Funktion und eine Schleife (ids annimmt $ ein Array)

public function duplicateItem($ids) 
{ 
    if (isset($ids[0])){ //at least one item 

     $sqlQuery = "INSERT INTO items (item_id, content) VALUES "; 

     for($i=0; $i<count($ids); $i++) { 

       if ($i == count($ids)-1){ 
        $sqlQuery .= "(".$ids[$i][0].", '".$ids[$i][1]."');"; 
       }else{ 
        $sqlQuery .= "(".$ids[$i][0].", '".$ids[$i][1]."'),"; 
       } 

     } 

     mysql_query($sqlQuery) or die('Error, insert query failed: '.mysql_error()); 

    } 
} 
+0

Es ist besser, die Verkettung zu vermeiden. Verwende 'implode()'. Einzelheiten hierzu finden Sie unter [Antwort] (http://stackoverflow.com/a/780046/4040525). –

+1

Warum ist die Verwendung von implode() in diesem Fall vorteilhaft? In der obigen Frage haben wir normale SQL-Anweisungen. In der Antwort darauf verweisen Sie auf eine große Menge an Text (z. B. 1000 Einfügungen großer Texte) und, ja, in diesem Fall ist es gut, die Verkettung zu vermeiden. –

+0

Ich weiß.Es ist OK, Verkettung hier zu verwenden. Gestern bemerkte ich beide Antworten und dachte, es wäre besser, 'implode()' als Faustregel zu verwenden. –

-1
INSERT INTO table (a,b) VALUES (1,2), (2,3), (3,4); 
Verwandte Themen