Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 142 Pomógł: 7 Dołączył: 3.08.2007 Skąd: śląsk Ostrzeżenie: (0%)
|
Witam.
Mam pewien problem z transakcjami w MySQL. Mam skrypt, w którym robię zapis do bazy. Zapis ten odbywa się w pętli. Dane zapisują się do różnych tabel. Nie wiem jak zrobić żeby transakcja działała dla wywołania skryptu. Działa mi dla pojedynczej iteracji i jak napotka na problem np w piątej iteracji to te zmiany mi anuluje ale poprzednich nie wycofuje no i robi pozostałe (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Moderatorzy Postów: 36 561 Pomógł: 6315 Dołączył: 27.12.2004 |
no bo jak rozpoczynasz tranzakcje w petli to sie nie dziw ze dziala ci tylko dla danej iteracji. tranzakcje rozpoczynaj przed petla jak chcesz by dzialala ci dla calej petli
|
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 142 Pomógł: 7 Dołączył: 3.08.2007 Skąd: śląsk Ostrzeżenie: (0%)
|
transakcję rozpoczynam przed pętlą, dla każdego zapytania daję:
po zamknięciu pętli (a próbowałem też przed zamknięciem) daję
i niestety powiedzmy że zapisuję 49 rekordów i celowo w formularzu robię błąd, wtedy zapisuje się 48 rekordów a moim celem jest 49 albo nic |
|
|
|
Post
#4
|
|
|
Grupa: Moderatorzy Postów: 36 561 Pomógł: 6315 Dołączył: 27.12.2004 |
pokaz pelen kod bo pewnie masz gdzies blad logiczny i tyle (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
|
|
|
|
Post
#5
|
|
|
Grupa: Zarejestrowani Postów: 142 Pomógł: 7 Dołączył: 3.08.2007 Skąd: śląsk Ostrzeżenie: (0%)
|
trochę to będzie skomplikowane (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
dodaj.php <-- formularz
zapis.php
|
|
|
|
Post
#6
|
|
|
Grupa: Moderatorzy Postów: 36 561 Pomógł: 6315 Dołączył: 27.12.2004 |
ten kod to sieczka. zero sensownych wciec, nie wiadomo ktora linijka w jakim while, if, .... siedzi...
tego commit i rollback masz tez w petli czy poza nią? Bo widze ze siedzi w jakims bloku, ale za grzyba nie wiem w jakim. Jesli w petli to masz źle, bo ma byc poza. |
|
|
|
Post
#7
|
|
|
Grupa: Zarejestrowani Postów: 142 Pomógł: 7 Dołączył: 3.08.2007 Skąd: śląsk Ostrzeżenie: (0%)
|
może teraz będzie lepiej:
commit i rollback są poza jakąkolwiek pętlą |
|
|
|
Post
#8
|
|
|
Grupa: Moderatorzy Postów: 36 561 Pomógł: 6315 Dołączył: 27.12.2004 |
zniknelo teraz z kodu takie cos:$error=0;
nie wiem czy to zamierzone czy nie. Tak czy siak, teraz gdy natrafisz na blad to powinienes wogole zakonczyc dzialanie petli (break;) widze tutaj petle w petli. powinienes przerwac wszystkie petle. |
|
|
|
Post
#9
|
|
|
Grupa: Zarejestrowani Postów: 142 Pomógł: 7 Dołączył: 3.08.2007 Skąd: śląsk Ostrzeżenie: (0%)
|
zniknęło celowo, a co do break; to teraz pętla działa do napotkania pierwszego błędu czyli zapisy wykonują się kolejno do momentu przerwania pętli, więc zapisując 49 rekordów i robiąc błąd w 10 tym - zapisze się 9, dobrze zapisanych rekordów nie można wycofać .... poddaje się ...
|
|
|
|
Post
#10
|
|
|
Grupa: Moderatorzy Postów: 36 561 Pomógł: 6315 Dołączył: 27.12.2004 |
ale innoDB to ty uzywasz?
a, i sprawdz czy przypadkiem autocomita nie masz wlaczonego |
|
|
|
Post
#11
|
|
|
Grupa: Zarejestrowani Postów: 142 Pomógł: 7 Dołączył: 3.08.2007 Skąd: śląsk Ostrzeżenie: (0%)
|
problem tkwił w InnoDB
dzięki za pomoc nospor Pozdrawiam |
|
|
|
![]() ![]() |
|
Aktualny czas: 25.12.2025 - 05:25 |