Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Obsługa transakcji przez skrypt PHP
ktuvok
post
Post #1





Grupa: Zarejestrowani
Postów: 243
Pomógł: 0
Dołączył: 30.11.2003

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


Piszę skrypt, który zapisuje dane w kilku tabelach bazy MySQL. Ponieważ dane
muszą trzymać się kupy, ustawiłem sobie typ tabeli na InnoDB i próbuję
używać transakcji. W samej bazie nie ma problemu: "BEGIN; ... COMMIT;" albo
"... ROLLBACK" i sprawa załatwiona. Ale w skrypcie php?

Pytania mam takie:

1. Czy jeśli napiszę coś takiego:
  1. <?php
  2.  
  3. $SQL1 = &#092;"BEGIN;\";
  4. $SQL2 = &#092;"UPDATE Tabela SET Pole1=1 WHERE ID=8;\";
  5. mysql_query($SQL1);
  6. mysql_query($SQL2);
  7.  
  8. ?>

to czy wykonanie instrukcji $SQL1 nie powoduje przypadkiem, że WSZYSTKIE
zapytania do tej bazy będą oczekiwać "COMMIT" albo "ROLLBACK" na końcu?
Wolałbym aby dotyczyło to aktualnego połączenia, ale nigdzie nie jest to
jasno napisane...

2. Jak uzależnić wycofanie transakcji od wystąpienia błędu? Czy wystarczy to
zrobić tak:
  1. <?php
  2.  
  3. $SQL1 = &#092;"BEGIN;\";
  4. $SQL2 = &#092;"UPDATE Tabela SET Pole1=1 WHERE ID=8;\";
  5. $SQL3 = &#092;"UPDATE Tabela1 SET Pole='aaaa' WHERE ID=150;\";
  6. mysql_query($SQL1);
  7. $Wykonaj1 = mysql_query($SQL2);
  8. $Wykonaj2 = mysql_query($SQL3);
  9. if($Wykonaj1 != true || $Wykonaj2 != true)
  10. {
  11. mysql_query(&#092;"ROLLBACK;\");
  12. }
  13. else
  14. {
  15. mysql_query(&#092;"COMMIT;\");
  16. }
  17.  
  18. ?>


3. Czy wykonanie na końcu "COMMIT" bądź "ROLLBACK" nie spowoduje przypadkiem zatwierdzenia lub wycofania WSZYSTKICH innych transakcji równolegle zainicjowanych przez równolegle działające skrypty (lub inną instancję tego samego skryptu)?

Pewnie zaraz ktoś napisze żebym się przesiadł na Postrgresa, ale niestety
nie mogę... Działam na MySQL 4.0.21.

Podajcie proszę jakieś wskazówki.

--
Pozdrawiam,
Krzysiek
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 23.08.2025 - 14:23