Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [mysql] transakcje (innodb)
lenczewski
post
Post #1





Grupa: Zarejestrowani
Postów: 159
Pomógł: 1
Dołączył: 31.08.2005

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


cześć, doszedłem już że mysql (wersje starsze niż 5, nowsze niż 4.coś.tam) obsługuje transakcje ale w tabelach typu InnoDB. No i niby w porządku jednak...
Mamm dwie funkcje:
  1. <?php
  2. function connection()
  3. {
  4. global $conn;
  5. $conn = mysql_connect("localhost","root","krasnal") or die ("Błąd w połączeniu z bazą danych!");
  6. if (!$conn || !mysql_select_db("book",$conn))
  7. {
  8. return 0;
  9. } else {
  10. return $conn;
  11. }
  12. }
  13.  
  14. function sql($query)
  15. {
  16. if(!($conn = connection()))
  17. {
  18. return 0;
  19. } else {
  20. $result = mysql_query($query,$conn);
  21. if(!$result)
  22. {
  23. echo '<div class="ErrorStyle"><hr>Wystąpił błąd<br>[' . $query . ']<br>[' . mysql_error() . ']<hr></div>';
  24. } else {
  25. return $result;
  26. }
  27. }
  28. mysql_close($conn);
  29. }
  30. ?>

Czy moglibyście mi pomóc, żeby przerobić je tak, aby obsługiwały transakcje?
Nie chciałbym przerabiać wszystkich wywołań funkcji wiec wpadłem na pomysł, żeby transakcje wstawić w samej funkcji. Czy to dobre rozumowanie?


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
Adiasz
post
Post #2





Grupa: Zarejestrowani
Postów: 155
Pomógł: 0
Dołączył: 28.02.2004

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


Zamiast kopiowac bezmyslnie czyjes skrypty i dawac je pozniej do przerobienia moglbys sie troche wysilic i poczytac cos o tranzkcjach skoro juz wiesz ze costam costam je obsluguje.
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Jak mowil Adiasz: poczytaj o tranzakcjach, czym sa, jakie maja wlasciwosci, jak i kiedy sie je stosuje, to bedziesz wiedzial ze chcac w funkcji sql() zaimplementowac tranzakcje nie uzyskasz nic nowego -- kazde zapytanie bedzie OSOBNO w tranzakcji, czyli tak jak defaultowo dziala mysql (auto commit wszystkich zapytan).

W tranzakcje obejmuje sie zazwyczaj wiele (>1) zapytan (ale nikt nie zabrania robic tego dla 1go zapytania -- tylko to nie ma zadnych wlasciwosci tranzakcji) -- wiec i tak bedziesz musial caly kod przerobic.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
lenczewski
post
Post #4





Grupa: Zarejestrowani
Postów: 159
Pomógł: 1
Dołączył: 31.08.2005

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


czyli w sumie dla jednego zapytanie do bazy mogę z powodzeniem stosować funkcję SQL() (tą z przykładu powyżej)?

edit:
...a czy możecie odesłać mnie do jakiegoś rozsądnego przykładu (php + MySQL)?

add: 2006 05 01
napisałem coś takiego:
  1. <?php
  2. mysql_connect("localhost","root", "krasnal") or die(mysql_error());
  3.  
  4. @mysql_query("START TRANSACTION ");
  5.  
  6. $query = "INSERT INTO wpis (id, desc, who) values (11, 'ble ble ble', 'ble ble')";
  7. $result = @mysql_query($query);
  8. $query = "INSERT INTO wpis (id, desc, who) values (11, 'ble ble ble', 'ble ble')";
  9. $result = @mysql_query($query);
  10.  
  11. if(!$result) {
  12. @mysql_query("ROLLBACK");
  13. echo "bład";
  14. } else {
  15. @mysql_query("COMMIT");
  16. echo "dane dodane";
  17. }
  18. ?>
..i niby wszystko ładnie, jednak znalazłem problem jeżli błąd wyskoczy w nie ostatnim zapytaniu, np:
  1. <?php
  2. ....
  3. $query = "INSERT INTO wpis (id, desc, who) values (10, 'ble ble ble', 'ble ble')";
  4. $result = @mysql_query($query);
  5. $query = "INSERT INTO wpis (id, desc, who) values (10, 'ble ble ble', 'ble ble')";
  6. $result = @mysql_query($query);
  7. $query = "INSERT INTO wpis (id, desc, who) values (11, 'ble ble ble', 'ble ble')";
  8. $result = @mysql_query($query);
  9. ...
  10. ?>

czy można sprawdzić poprawność wykonania zapytań w inny, bardziej elastyczny sposób?

...i co się stanie jeżli serwer po drugim zapytaniu "padnie"? rzecz jasna że nie wykona się trzecie zapytanie, ale w jaki sposób wykona się ROLLBACK jeżli serwer nie odpowiada?

Ten post edytował lenzcewski 1.05.2006, 11:09:46


--------------------
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 - 07:31