Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Drobne pytanie dotyczące Transakcji
Forum PHP.pl > Forum > Przedszkole
kkuubbaa88
witam

mam małe pytanie dotyczace transakcji w mysql. cala transakcje zaczynam:

  1. mysql_query("START TRANSACTION");


nastepnie mam kilka osobnych zapytan o takiej budowie:

  1. $zapytanie = "insert into tabela (pole1,pole2,pole3) values (1,2,3);";
  2. if (!$wynik = mysql_query($zapytanie)){
  3. mysql_query("ROLLBACK");
  4. }
  5.  
  6. $zapytanie = "insert into tabela (pole1,pole2,pole3) values (1,2,3);";
  7. if (!$wynik = mysql_query($zapytanie)){
  8. mysql_query("ROLLBACK");
  9. }
  10.  
  11. itd...


a pod koniec:

  1. mysql_query("COMMIT");


teraz moje pytanie, poniewaz nie do końca wiem jak działają te transakcje. czy przy takiej budowie w php zapytan, gdy wywali sie przykladowo drugie zapytanie i cala transakcja zostanie cofnieta to co sie stanie z pozostalymi ? zostana pominiete ? czy moze zapisane, ale bez transakcji ?

czy jednak jest to zle zapisane i nie powinienem po kazdym zapytaniu wywolywac RollBack ? tylko pod sam koniec sprawdzic czy ktores zapytanie sie wywalilo i tylko wtedy raz wywolac rollback ?

prosze o porade smile.gif
zordon
1. zaczynasz transakcję

2. wykonujesz operacje w bazie, sprawdzasz wyniki w php

3. jesli w którymkolwiek zapytaniu wystąpił błąd żadna z operacji na bazie od momentu rozpoczęcia transakcji nie zostanie zapisana
jeśli sprawdziłeś sobie rezultaty zapytań i jakiś wynik nie odpowiada Twojemu celowi dajesz rollback i żadna z operacji na bazie od momentu rozpoczęcia transakcji nie zostanie zapisana

4. Jeśli wszystko wg Ciebie jest ok -> dajesz commit i wszystkie operacje od momentu rozpoczęcia transakcji zostaną zapisane

Najłatwiej to zrozumieć na najbardziej popularnym przykładzie przelewu bankowego: Jeśli przelewasz komuś kasę to nie może zdarzyć się, że bank pobierze od Ciebie kasę, a później serwer banku wyłoży się zanim pieniądze zostaną przelane do adresata i pieniądze "przepadną". Dzięki transakcjom albo kasa zostanie Tobie pobrana i zapisana na konto adresata, albo nie zmieni się nic.
kkuubbaa88
mniej wiecej kojarzę tylko czy przy moim zapisie to jest poprawnie ? przy kazdym zapytaniu dawac rollback czy tylko pod koniec raz wywolac rollback w przypadku jakichkolwiek bledow. czy moze to nie ma znaczenia, poniewaz obydwie metody są poprawne ?
jaslanin
każda metoda jest dobra o ile spełnia Twoje oczekiwania. Jeżeli wywołanie raz na końcu rollback zapewni Ci bezpieczeństwo którego oczekujesz, to tak zrób (mniej kodu niż pisanie pod każdym zapytaniem).
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.