Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> transakcje, potwierdzenie transakcji bez COMMIT?
ernik
post
Post #1





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 4.04.2005

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


rozpoczynam transakcje, w trakcie sprawdzam jakies warunki i w przypadku false, wychodzi z danej funkcji z bledem i nie dociera do polecenia COMMIT,
ale zmiany w bazie i tak sa dokonywane blink.gif co jest? czemu tak sie dzieje?
  1. <?php
  2.  
  3. mysql_query(&#092;"BEGIN;\",$connect);
  4. mysql_query(jakis insert);
  5. if(costam) return false;
  6. mysql_query(&#092;"COMMIT;\",$connect);
  7.  
  8. ?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
Jarod
post
Post #2





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Cytat(ernik @ 2005-05-16 22:45:03)
rozpoczynam transakcje,  w trakcie sprawdzam jakies warunki i w przypadku false, wychodzi z danej funkcji z bledem i nie dociera do polecenia COMMIT,
ale zmiany w bazie i tak sa dokonywane blink.gif  co jest? czemu tak sie dzieje?
  1. <?php
  2.  
  3. mysql_query(&#092;"BEGIN;\",$connect);
  4. mysql_query(jakis insert);
  5. if(costam) return false;
  6. mysql_query(&#092;"COMMIT;\",$connect);
  7.  
  8. ?>


Masz przykład:
  1. <?php
  2.  
  3. //Połączenie z bazą danych
  4. $conn = mysql_connect($server, $identyfikator, $haslo)
  5. or die (&#092;"Nie udało się połączyć z bazą danych! BŁĄD: \".mysql_error());
  6.  
  7. //Wybór bazy danych
  8. or die (&#092;"Nie udało się wybrać bazy! BŁĄD: \".mysql_error());
  9.  
  10. //------------------->ROZPOCZCIE TRANSAKCJI
  11. $query = &#092;"BEGIN WORK\";
  12. $result = mysql_query($query)
  13. or die (&#092;"Zapytanie nieudane! BŁĄD: \".mysql_error());
  14.  
  15. //Jakiś insert 1
  16. $query = &#092;"Insert.....;\";
  17. $result = mysql_query($query)
  18. or die (&#092;"Zapytanie nieudane! BŁĄD: \".mysql_error());
  19.  
  20. //Jakiś insert 2
  21. $query = &#092;"Insert.....;\";
  22. $result = mysql_query($query)
  23. or die (&#092;"Zapytanie nieudane! BŁĄD: \".mysql_error());
  24.  
  25.  
  26. //------------------> KONIEC TRANSAKCJI
  27. $query = &#092;"COMMIT WORK\";
  28. $result = mysql_query($query)
  29. or die (&#092;"Zapytanie nieudane! BŁĄD: \".mysql_error());
  30.  
  31. ?>


Jeśli inerst 1 powiedzie się a insert 2 nie powiedzie się to nic nie zostanie zapisane. Tabele muszą być InnoDB. W mysql > 4.1.x są chyba domyślne - sprawdź w archiwum gdzieś o tym pisałem. Jeśli mój przykład zawiedzie to znaczy, że w bazie ustawione jest AITOCOMMIT=1 ( automatycznie wszystko zatwierdza) więc zmień to na 0

pozdrawiam

EDIT: Tu masz więcej na ten temat http://forum.php.pl/index.php?showtopic=29...je+i+blokowanie

Ten post edytował J4r0d 17.05.2005, 00:51:01


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
ernik
post
Post #3





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 4.04.2005

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


nie zadzialalo,
nawet rollback nie dziala jak wstawie przed zwroceniem bledu

czy ustawiajac autocommit=0 musze nawet pojedyncze INSERT,UPDATE,DELETE zawierac w (begin;) -tu polecenie (commit;)?

normalnie masakra, transakcja nie chce zadzialac... blink.gif
wstawiam pomiedzy inserty - "twardy" 'return' mimo ze nie dodaje do drugiej tabelki, to do pierwszej dodaje... mad.gif

EDIT:wreszcie zadzialalo , wystarczylo zmienic tabelke na InnoDB (niedopatrzenie - ale to z nawalu pracy)

no wlasnie czemu tworzy mi tabelki myisam, skoro w skrypcie mam ustawione TYPE=InnoDB dla kazdej tabelki, skrypt wykonuje sie prawidlowo ale tabelki sa myisam mad.gif

Ten post edytował ernik 17.05.2005, 10:04:21
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




w przypadku, gdy wychodzisz z funkcji przez zakonczeniem transakcji musisz dać rollback, aby wycofać wszelkie zmiany.
commit dajesz gdy zatwierdzasz zmiany, rollback gdy nie zatwierdzasz i chesz się wycofać. Mi to zawsze dziala.

Wniosek: gdy błąd to rollback


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 19.08.2025 - 13:47