Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Transakcje
MakS
post 7.04.2003, 00:27:26
Post #1





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 11.04.2002
Skąd: Rzeszów

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


wlasnie pisze gre internetowa i potrzebne sa mi tam transakcjie z sqla ale niebardzo ma mi kto w tym pomoc, a nie znam na tyle angielskiego zeby angielskie artykuly czy ksiazki poczytac, licze ze pomozecie mi z tym ewentulanie moze ktos ma jakis inny problem na rozwiazenie takiego problemu:
Cytat
Robie gre internetowa (sportowa) i mam 3 tabele w bazie:  
1) nazwa, kasa itd
2) sklad
3) historia transferow

i teraz chce zrobic transfery, tylko przy 1 transferze mam 3 zapytania do bazy (2 * inser i 1* update) i wlasnie nie wiem jak to zrobic tak zebym mial pewnosc ze mi dodalo czy zupdatowalo table, tzn wiem jak sprawdzic czy np. dodal do bazy, ale nie wiem co zrobic jak nie doda.
Najlepeiej dam przyklad:
Gosciu kupuje sobie kogos za iles tam kasy i teraz dodaje mu tego kogos do tabeli sklad, dodaje mu ten transfer do tabeli transfery i updatuje kase i problem moze byc jak np przy tym ostatnim zapytaniu cos sie wywali i kasa zostanie sprzed transferu.
Go to the top of the page
+Quote Post
uboottd
post 14.04.2003, 21:05:11
Post #2





Grupa: Zarejestrowani
Postów: 384
Pomógł: 0
Dołączył: 3.04.2003
Skąd: Chorzow

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


Schemat takiej funkcji wyglada tak:
1. Zaczynasz transakcje (BEGIN)
2. Zmieniasz dane ktore chcesz, sprawdzasz poprawnosc tych zmian
3. Jesli zmiany sa poprawne to zamykasz transakcje (COMMIT), albo jesli uwazasz ze dane sa be to wtedy wycofujesz transakcje (ROLLBACK).

Uwagi jesli korzystasz z MySQL-a:
- wlacz "tryb transakcyjny" poprzez SET AUTOCOMMIT=0
- wszystkie tabele zmieniane w transakcji musza byc typu wspierajacego transakcje, w praktyce oznacza to InnoDB
Go to the top of the page
+Quote Post
MakS
post 16.04.2003, 09:00:53
Post #3





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 11.04.2002
Skąd: Rzeszów

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


Dzieki, a moglbys mi cos wiecej napisac, np przykladowe uzycie transakcji, albo podac linka, badz same materialy do tego, bo niestety dalej mam blade pojecie o tym, a niestety moj angielski jest na tyle slaby ze nie pozwala mi korzystac z artykulow po angielsku sad.gif. Bylbym ci bardzo wdzieczny.
Go to the top of the page
+Quote Post
uboottd
post 16.04.2003, 13:28:21
Post #4





Grupa: Zarejestrowani
Postów: 384
Pomógł: 0
Dołączył: 3.04.2003
Skąd: Chorzow

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


Z pamieci, nietestowane.

[php:1:87742e7327]
mysql_query("set autocommit=0");
mysql_query("begin");
$r = mysql_query("select ilosc from kasa where zawodnik=5 for update");
$ro = mysql_fetch_object($r);
$r = mysql+query("select cena from transfery where gosc=2");
$to = mysql_fetch_object($r);
$kasa_docel = $ro->ilosc - $to->cena;
if (mysql_query("update kasa set ilosc = '$kasa_docel' where zawodnik=5"))
mysql_query("rollback"); /* cos sie nie powiodlo */
else
mysql_query("commit"); /* zatwierdzenie zmian */
[/php:1:87742e7327]

i tak dalej mniej wiecej w tym guscie. najlepiej odpal sobie gdzies przykaldowa baze i pobaw sie (najlepiej na dwoch sesjach jednoczesnie)
Go to the top of the page
+Quote Post
MakS
post 16.04.2003, 13:38:23
Post #5





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 11.04.2002
Skąd: Rzeszów

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


Wielkie dzieki biggrin.gif

Zaraz siade i przetestuje i jakby co to najwyzej bede dalej pytal na forum biggrin.gif

Jeszcze raz dzieki smile.gif
Go to the top of the page
+Quote Post
melon
post 17.04.2003, 12:02:42
Post #6





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 25.03.2003

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


Witam!

Chialem tylko dodac, ze MySQL musi byc skompilowany z obsluga InnoDB
(--with-innodb), a tabela na ktorej robisz transakcje musi byc typu InnoDB, a nie MyISAMI.

Wersja 4.x MySQL'a ma standardowo obsluge InnoDB.

Melon


--------------------
<?print(base64_decode("QWxsIHlvciBiYXNlIGFyZSBiZWxvbmcgdG8gdXMh"));?>
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 Wersja Lo-Fi Aktualny czas: 27.04.2024 - 23:16