Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PDO|Transakcje
Forum PHP.pl > Forum > PHP
jacek21
Witam zastanawia mnie dlaczego transakcje nie chcą u mnie działać:
Używam tebel InnoDB, mysql w wersji 5.5.

  1. public function UnitThema($dane){
  2. try{
  3. if($this->con->beginTransaction){
  4. $this->con->beginTransaction();
  5. $this->con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  6.  
  7. $unnitAdd = $this->con->prepare('INSERT INTO doku_r (doku_r_doku_id, doku_r_rozdzial, id_rozdzialu, doku_r_accept)
  8. Values (:bookID, :rozdzialName, :rozdzialID, :accept)
  9. ');
  10.  
  11. //tu bindowanie i wykonanie
  12. $themaAdd = $this->con->prepare('INSERT INTO dok_t (doku_t_rozdzialid, doku_t_autor, doku_t_podpis, doku_t_temat,
  13. doku_t_wpis, doku_t_doku_id, numer_lekcji, dok_t_accept)
  14. Values(:bookID, :autor, :podpisIMG, :temat, :wtresc, :idRozdzialu, :lekcja, :accept)
  15. ');
  16. //tu bindowanie i wykonanie
  17. print_r($themaAdd->errorInfo());
  18. $this->con->commit();
  19. }else{
  20. echo "Problem z transakcja";
  21. }
  22. }catch(Exception $blad){
  23. echo "niestety wystapił błąd";
  24. $this->con->rollBack();
  25. }
  26. }


Ktoś wie czemu tansakcja nie chce być mi posłuszna smile.gif ?
nospor
Po czym wnioskujesz, że transakcja ci nie dziala?

ps:
http://pl1.php.net/manual/en/pdo.prepare.php
PREPARE tylko przygotowuje zapytanie a nie go wykonuje....
Crozin
1. Dlaczego ustawiasz PDO w tryb obsługi wyjątków dopiero w bloku try..catch, a nie zaraz po nawiązaniu połączenia?
2. Włącz sobie raportowanie błędów, bo nawet nie widzisz jak coś się sypie.
3. Odnośnie punktu drugiego: if($this->con->beginTransaction) - co niby miałby robić ten kod (poza rzuceniem błędem).
jacek21
Cytat(nospor @ 8.05.2013, 14:03:15 ) *
Po czym wnioskujesz, że transakcja ci nie dziala?

ps:
http://pl1.php.net/manual/en/pdo.prepare.php
PREPARE tylko przygotowuje zapytanie a nie go wykonuje....


tak, ale dalej mam: $unnitAdd->execute();(drugie zapytanie też jest wykonywane dodałem o tym informacje w komentarzu) a to oznacza, że wykonuje przygotowane zapytanie ?

Crozin:
1. Dlaczego ustawiasz PDO w tryb obsługi wyjątków dopiero w bloku try..catch, a nie zaraz po nawiązaniu połączenia?
chyba nie do końca rozumeim pytanie ;|
3. Szukając dlaczego transakcja nie przebiega tak jak powinna wpadłem na to na jakiejś stronie i postanowiłęm sprawdzić
nospor
Włącz wkoncu wyswietlanie bledow jak ci radzono
Temat: Jak poprawnie zada pytanie

I napisz wkoncu czym się objawia to "niedziałanie" jak już cię o to pytano. Czemu trzeba wszystko 15 razy powtarzać?
jacek21
Mam włączony reporting błędów i problem w tym, że nie wyświetla się żaden błąd.
Jedynie mam raz notice o index, ale to w ogóle w innej metodzie.

wkleje jeszcze raz mój aktualny kod:
  1. public function UnitThema($dane){
  2. try{
  3. $this->con->beginTransaction();
  4. $this->con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  5.  
  6. $unnitAdd = $this->con->prepare('INSERT INTO doku_r (doku_r_doku_id, doku_r_rozdzial, id_rozdzialu, doku_r_accept)
  7. Values (:bookID, :rozdzialName, :rozdzialID, :accept)
  8. ');
  9. $unnitAdd->bindValue(':bookID', $dane['bookID'], PDO::PARAM_INT);
  10. $unnitAdd->bindValue(':rozdzialName', $dane['rozdzial'], PDO::PARAM_STR);
  11. $unnitAdd->bindValue(':rozdzialID', $nowy, PDO::PARAM_INT);
  12. $unnitAdd->bindValue(':accept', 0 , PDO::PARAM_INT);
  13. $unnitAdd->execute();
  14.  
  15. $themaAdd = $this->con->prepare('INSERT INTO dok_t (doku_t_rozdzialid, doku_t_autor, doku_t_podpis, doku_t_temat,
  16. doku_t_wpis, doku_t_doku_id, numer_lekcji, dok_t_accept)
  17. Values(:bookID, :autor, :podpisIMG, :temat, :wtresc, :idRozdzialu, :lekcja, :accept)
  18. ');
  19. $themaAdd->bindValue(':bookID', $dane['bookID'], PDO::PARAM_INT);
  20. $themaAdd->bindValue(':autor', $dane['autor'], PDO::PARAM_STR);
  21. $themaAdd->bindValue(':podpisIMG', $dane['podpisIMG'], PDO::PARAM_STR);
  22. $themaAdd->bindValue(':temat', $dane['temat'], PDO::PARAM_STR);
  23. $themaAdd->bindValue(':wtresc', $dane['wtresc'], PDO::PARAM_STR);
  24. $themaAdd->bindValue(':idRozdzialu', $nowy, PDO::PARAM_INT);
  25. $themaAdd->bindValue(':lekcja', $numer_lekcji, PDO::PARAM_INT);
  26. $themaAdd->bindValue(':accept', 0, PDO::PARAM_INT);
  27. $themaAdd->execute();
  28. print_r($themaAdd->errorInfo());
  29. $this->con->commit();
  30. }catch(Exception $blad){
  31. echo "niestety wystapił błąd";
  32. $this->con->rollBack();
  33. }
  34. }


a i nie odpowiedziałem na Twoje wcześniejsze pytanie, przepraszam:
"Po czym wnioskujesz, że transakcja ci nie dziala?"
po tym, że wszytsko się wykonuje w 2 zapytaniu jest błąd i nie wpisuje do danych do drugiej tabeli zaś w pierwszej jest wszystko okey i dodaje dane a powinien wystąpić wyjątek(ponieważ występuje błąd w 2 zapytaniu(print_r($themaAdd->errorInfo()); ) . Czyli chyba coś nie tak z transakcją, ale to tylko moje przypuszczenia..
nospor
Cytat
(ponieważ występuje błąd w 2 zapytaniu(print_r($themaAdd->errorInfo()); )
Skoro dochodzisz do tego print_r znaczy ze twoj kod nie rzuca ci wyjątku, a jak nie rzuca ci wyjątki to i nie robi rollback. Wiec to nie jest blad transakcji smile.gif Na przyszlosc opisuj problem dokładnie od razu
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.