![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 51 Pomógł: 0 Dołączył: 29.12.2005 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Próbuję zrozumieć jak działają transakcję. Używam adodb i wg. manuala http://phplens.com/adodb/tutorial.smart.transactions.html próbuje to przetestować, lecz nie działa.
Tutaj mam 2 przykładowe zapytania, 1 zawiera błąd, 2 jest dobre. Ja to rozumiem tak: jeśli jakiegoś zapytania nie może wykonać to nie powinien wykonywać innych zapytań, a w tym przypdaku niestety to nie działa i 2 zap. jest wykonywane. Czy coś źle rozumiem. Z góry dziękuje za odpowiedź. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 856 Pomógł: 19 Dołączył: 30.08.2005 Skąd: 100lica Ostrzeżenie: (0%) ![]() ![]() |
Nie se tylko set
|
|
|
![]()
Post
#3
|
|
Administrator wortalu Grupa: Przyjaciele php.pl Postów: 960 Pomógł: 39 Dołączył: 21.10.2003 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Przenoszę na gotowe skrypty.
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 51 Pomógł: 0 Dołączył: 29.12.2005 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Nie se tylko set Wiem, przecież specjalnie zrobiłem ten błąd (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Czyli źle rozumiem istote transakcji? Nie powinno jej przerwać po błędzie w 1 zapytaniu? pzdr |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 154 Pomógł: 0 Dołączył: 17.12.2003 Skąd: Olsztyn Ostrzeżenie: (0%) ![]() ![]() |
to nie do końca tak.
bardzo skrótowo, ale teraz rozumiesz idee? |
|
|
![]()
Post
#6
|
|
Grupa: Moderatorzy Postów: 2 921 Pomógł: 269 Dołączył: 11.08.2005 Skąd: 127.0.0.1 ![]() |
W Transakcjach chodzi o to, że jeśli jakieś zapytanie jest niepoprawne, wówczas wszystkie zamiany wprowadzone przez inne zapytania zostaną cofnięte. Ale by to zadziałało musisz użyć funkcji rollback. Jesli wszystkie zapytania zostały poprawnie wykonane, wówczas stosuje się funkcje commit. Po wykonaniu commit nie można cofnąć zmian, jakie miały miejsce podczas wykonywania transakcji.
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 51 Pomógł: 0 Dołączył: 29.12.2005 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za odpowiedzi.
@batman Czyli to działa tylko w jedną stronę, tak: jeśli w zap2 jest błąd, to cofa zap1 a nie działa gdy: w zap1 jest błąd, to nie wykona zap2. Dobrze rozumiem? Mi się zdaje, że tak powinno być, bo powiedzmy, że w zap1 tworzę użytkownika, a w zap2 dodaje go do grupy. Więc nie powinno być tak, że jeśli nie może dodać usera, to go nie dodaje do grupy? Dziwne (IMG:http://forum.php.pl/style_emoticons/default/sadsmiley02.gif) Pozdrawiam, Kamil |
|
|
![]()
Post
#8
|
|
Grupa: Moderatorzy Postów: 2 921 Pomógł: 269 Dołączył: 11.08.2005 Skąd: 127.0.0.1 ![]() |
Cytat Dobrze rozumiem? Mi się zdaje, że tak powinno być, bo powiedzmy, że w zap1 tworzę użytkownika, a w zap2 dodaje go do grupy. Więc nie powinno być tak, że jeśli nie może dodać usera, to go nie dodaje do grupy? Dobrze rozumiesz. Jeśli w jakimkolwiek zapytaniu jest błąd, wówczas efekt działania wszystkich zapytań jest cofany. |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 51 Pomógł: 0 Dołączył: 29.12.2005 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
W takim razie odwołuje się do mojego pierwszego posta. Przypominam - mam tam używając adodb zap1, i zap2. W zap1 jest błąd, lecz mimo tego zap2 jest wykonywane. Dlaczego? Coś z tymi Smart Trans jest w adodb?
Pozdrawiam |
|
|
![]()
Post
#10
|
|
Grupa: Moderatorzy Postów: 2 921 Pomógł: 269 Dołączył: 11.08.2005 Skąd: 127.0.0.1 ![]() |
Poczytałem to co w linku podałeś i szczerze mówiąc, nie wiem dlaczego tak się dzieje. A sprawdzałeś czy działa stara metoda?
Cytat The old way of doing transactions required you to use $conn->BeginTrans(); $ok = $conn->Execute($sql); if ($ok) $ok = $conn->Execute($sql2); if (!$ok) $conn->RollbackTrans(); else $conn->CommitTrans(); Możliwe, że jest jakiś babol w tej bibliotece. |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 416 Pomógł: 0 Dołączył: 8.01.2004 Ostrzeżenie: (0%) ![]() ![]() |
Nie sadze zeby byl babol w ADODB. Z jakiej bazy danych korzystasz? Czy na pewno obslugje transakcje? Pamietaj ze jesli chcesz korzystac z transakcji w mysql tabele musza byc ustawione na InnoDB a nie na MyISAM
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 51 Pomógł: 0 Dołączył: 29.12.2005 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Witam, przepraszam, że dopiero teraz odpowiadam, ale sprawy wyższe.
Starym sposobem też nie chce działać, czyli coś u mnie źle.
Moje MySQL: 5.0.24, chyba powinien obsługiwać transakcje (zestaw WebServ) Tabele używam InnoDB do tego. Chyba, że coś źle rozumiem. Czy transakcje powinny reagować na błędy w składni zapytania? Proszę o pomoc i z góry dziękuję. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 14.10.2025 - 10:30 |