2009-08-20 18 views
19

Czy to jest legalne?Wiele instrukcji mysql INSERT w jednym zapytaniu php

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

mi rozwiązać mój problem uruchamianie wielu zapytanie o moim projekcie PHP przy użyciu tej metody mysqli [mysqli .multi-query.] (http://us2.php.net/manual/en/mysqli.multi-query.php) –

Odpowiedz

0

Nie. Są to oddzielne zapytania i należy je nazywać.

33

Nie, mysql_query() zezwala tylko na jedno zapytanie naraz.

można wstawić wiele wierszy tak:

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

Ten jest lepszy - ważne jest podanie nazw pól, w których wysyłasz dane do ! – itsricky

2

W ogóle, to ważny SQL ponieważ każda instrukcja kończy się średnikiem, ale PHP nie pozwala na wysyłanie więcej niż jedno zapytanie w czasie, w celu ochrony przed atakami typu SQL Injection, które mogą eksploatować źle napisany skrypt.

Można nadal używać składni jak:

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

z MySQL dev wsparcia 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"); 

Więc włóż idzie normalnie jak zawsze:

  • nazewnictwa pierwszą nazwę tabeli gdzie chcemy wstawić nowy wiersz,
  • fol lowed nazywając nazwy kolumn w nawiasach okrągłych (Uwaga: nie jest potrzebne, jeśli chcesz wstawić WSZELKIE kolumny),
  • następnie WARTOŚCI nazwę klucza, a następnie w nawiasach okrągłych pochodzi wartości, które chcesz wstawić do nowego wiersza w powyższej tabeli
  • następnie PRZECINEK a następnie inna para nawiasach na nowe wartości dla nowego rzędu w tabeli poniżej powyżej
  • i ten powtarza N-razy ile trzeba danych do wstawienia.

Szczęśliwe wstawianie wielu wartości za pomocą instrukcji ONE insert. :)

2

Kopiuj wklej przykład/w funkcji i pętli (załóżmy $ ids jest tablicą)

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

Lepiej unikać konkatenacji. Użyj 'implode()'. zobacz ten [odpowiedź] (http://stackoverflow.com/a/780046/4040525) w celu uzyskania szczegółowych informacji. –

+1

Dlaczego korzystanie z implodu() jest w tym przypadku korzystne? W powyższym pytaniu mamy normalne instrukcje SQL. W odpowiedzi wskazujesz, że mówią o dużej ilości tekstu (na przykład o 1000 wstawkach dużych tekstów) i, tak, w takim przypadku dobrze jest uniknąć konkatenacji. –

+0

Wiem.Jest w porządku używać tutaj konkatenacji. Wczoraj zauważyłem obie odpowiedzi i pomyślałem, że lepiej jest użyć 'implode()' jako reguły. –

-1
INSERT INTO table (a,b) VALUES (1,2), (2,3), (3,4); 
Powiązane problemy