Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][Bazy danych]Transakcje
MateuszS
post
Post #1





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


Witam, mam taką prostą transakcję:

  1. try {
  2. DB::query(NULL, 'START TRANSACTION')->execute(); //1
  3. DB::query(NULL, 'CREATE TABLE lrt_resources_'.$name_lower.' (ID int NOT NULL AUTO_INCREMENT, PRIMARY KEY(ID))')->execute(); //2
  4. DB::query(Database::INSERT, 'INSERT INTO lrt_equpment_categories (name, name_lower) VALUES ("'.$name.'","'.$name_lower.'")')->execute(); //3
  5. DB::query(NULL, 'COMMIT')->execute();
  6. } catch(Exception $e) {
  7. DB::query(NULL, 'ROLLBACK')->execute();
  8.  
  9. throw new Exception('An error occured with database. Category has not been added.');
  10. }
  11.  


czyli jeżeli np będzie problem z INSERTem (3) to wyrzuca wyjątek, który jest łapany i powinien byc robiony ROLLBACK. Niestety, mimo że wyjątek jest przechwytywany to nie jest robiony ROLLBACK. Czyli po błędzie przy INSERT nie usuwa tej tabeli z zapytania 2. Co zepsułem?

Ten post edytował MateuszS 14.08.2014, 12:38:17


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
Pyton_000
post
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


http://dev.mysql.com/doc/refman/5.1/en/implicit-commit.html
Go to the top of the page
+Quote Post
MateuszS
post
Post #3





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


Ok, dzięki. Na szczęście zamienienie miejscami obu zapytań mi wystarczy i będzie działało jak chcę.


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
Crozin
post
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


1. MySQL nie obsługuje transakcji dla zapytań DDL (CREATE TABLE), możesz zainteresować się PostgreSQL.
2. Dlaczego w ogóle robisz coś tak dziwnego, tj. osobną tabelę dla każdego $name_lower?
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 - 05:32