Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql] INSERT do kilku tabel
Forum PHP.pl > Forum > Przedszkole
funky_beat
Jak powino wyglądać zapytanie wstawiające rekordy to na przyklad dwoch tabel jednoczesnie?
in5ane
Moim skromnym zdaniem możesz zrobić:

  1. $query1="INSERT INTO tabela_1 (plak) VALUES ('$plak')";
  2.  
  3. $query2="INSERT INTO tabela_2 (plak) VALUES ('$plak')";



P.S.: Możliwe, że się myle.
funky_beat
ale mi chodzi o to zeby jednym zapytaniem to zrobic sad.gif
drPayton
Nie da się. Nie istnieje składnia dla INSERTa na wiele tabel jednocześnie (choć dziwne to jest, przyznam)
Cienki1980
Jakoś nie wydaje mi się, żeby była taka możliwość. Ja mimo tego, że w sql'u siedzę już ładnych parę lat nie spotkałem się z takim zapytaniem.

A dlaczego koniecznie musi być to jedno zapytanie do wielu tabel questionmark.gif
drPayton
Bodajże w starych (początki 4) wersjach MySQL była taka możliwość. Ale może mi się przywidziało.
Grzyw
Kilka rekordów do 1 tabeli da się, 1 rekord do wielu tabel już nie.
Ale jeżeli chcesz to zrobić możliwie najwydajniej, wyklikaj funkcję, która jako argument przyjmie tablice z nazwami tabel, a w tej funkcji będzie realizowane query do bazy z miejsce nazwy tabeli wstawiając kolejne ementy z tablicy.
funky_beat
moze to troche smieszne co napisze, ale chciałem to napisac w jednym zapytaniu po to aby do tego jednego zapytania zrobic warunek:

  1. <?php
  2. $query = "INSERT INTO tabela1 (kolumna1) VALUES ('$wartosc')";
  3. $result = @mysql_query ($query);
  4. if ($result) { 
  5.  
  6. echo 'Rekord zapisany';
  7.  
  8. exit();
  9. ?>
drPayton
Śmieszne bynajmniej to nie jest. Możesz zrobić to tak, że po każdym insercie, jeśli OK do tablicy idzie wartość, np true, a jak błąd to false. I dopiero po wszystkich zapytaniach sprawdzasz, czy w tablicy znajduje się wartość false (przynajmniej jedna). Jeśli tak - to komunikat błędu, jeśli nie, to znaczy że wszystko poszło ok. np:
  1. <?php
  2. $tab = array();
  3. // początek pętli insertów
  4. $query = "INSERT INTO tabela1 (kolumna1) VALUES ('$wartosc')";
  5. $result = @mysql_query ($query);
  6. if ($result) { 
  7. $tab[] = true
  8. } else {
  9. $tab[] = false;
  10. }
  11. // koniec pętli insertów
  12. if(in_array(false, $tab)) {
  13. echo "coś nie halo!";
  14. } else {
  15. exit();
  16. }
  17.  
  18. ?>
funky_beat
czyli w ten sposob?

  1. <?php
  2. $query1 = "INSERT INTO tabela1 (kolumna1) VALUES ('$wartosc1')";  //pierwszy insert
  3. $result1 = @mysql_query ($query1);
  4.  
  5. $query2 = "INSERT INTO tabela2 (kolumna1) VALUES ('$wartosc2')";  //drugi insert
  6. $result2 = @mysql_query ($query2);
  7.  
  8. if ($result1 && $result2)
  9. {
  10.  
  11. echo 'Rekord zapisany';
  12.  
  13.  
  14. exit(); 
  15.  
  16. }
  17. ?>
PanGuzol
Pokombinuj z mysqli_autocommit" title="Zobacz w manualu PHP" target="_manual
envp
A co z transakcjami Panowie ? smile.gifsmile.gif
Cienki1980
Cytat(envp @ 30.08.2007, 13:09:02 ) *
A co z transakcjami Panowie ? smile.gifsmile.gif

Nic biggrin.gif

Transakcje mogą tylko pomóc w przypadku gdy z 10 INSERTów przynajmniej jedno się nie powiedzie i wtedy chcesz wycofać pozostałe 9.

Ale nie zmienia to faktu ze musisz wykonać 10 zapytań INSERT ... plus jedno na początku BEGIN TRANSACTION i w przypadku powodzenia COMMIT TRANSACTION lub w przypadku błędu ROLLBACK TRANSACTION.
funky_beat
a tak przy okazji. Jaka funkcja zwraca id ostatniego inserta?
Cienki1980
Cytat(funky_beat @ 30.08.2007, 13:23:16 ) *
a tak przy okazji. Jaka funkcja zwraca id ostatniego inserta?


Manual mówi: mysql_insert_id" title="Zobacz w manualu PHP" target="_manual
jastu
Wyzwalacz albo widok albo widok i wyzwalacz smile.gif
-qooxdoo-
  1. INSERT INTO tabela1 VALUES('val1'); INSERT INTO tabela2 VALUES('val2');

Nie słyszałem o czymś takim jak wpisywanie wartości do wielu tabel za pomocą jednednego zapytanie insert. Ale to powyżej zadziała tak samo, jakbyś oczekiwał
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.