Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL] Drobne pytanie dotyczące Transakcji
kkuubbaa88
post
Post #1





Grupa: Zarejestrowani
Postów: 510
Pomógł: 1
Dołączył: 27.08.2007

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
zordon
post
Post #2





Grupa: Zarejestrowani
Postów: 358
Pomógł: 78
Dołączył: 4.11.2008
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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.

Ten post edytował zordon 28.05.2010, 14:49:55
Go to the top of the page
+Quote Post
kkuubbaa88
post
Post #3





Grupa: Zarejestrowani
Postów: 510
Pomógł: 1
Dołączył: 27.08.2007

Ostrzeżenie: (0%)
-----


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 ?
Go to the top of the page
+Quote Post
jaslanin
post
Post #4





Grupa: Zarejestrowani
Postów: 511
Pomógł: 143
Dołączył: 13.03.2010
Skąd: Jasło

Ostrzeżenie: (0%)
-----


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).
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 16:21