Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Transakcja a bledy
mdudi
post
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 3.06.2006

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


Witam!
Mam taki problem, ze w php pisze transakcje z update i na poziomie postgresql jest sprawdzane czy ten update moze wystapic jezeli nie wystapil to chce zeby na stronie wyswietlalo mi o tym informacje, w traksakcji funkcja pg_affected_rows() nie pomoze mi niestety. Ma ktos jakis pomysl jak sobie z tym poradzic??
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
SongoQ
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Nie na pisales na jakiez zasadzie w PG sprawdzasz czy mozna zmodyfikowac rekord. Mozesz np zrobic trigger i wywalac blad i wtedy nie sprawdzasz ilosc zmodyfikowanych rekordow tylko czekasz na blad a jak blad to wiadomow wycofanie transakcji.
Go to the top of the page
+Quote Post
mdudi
post
Post #3





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 3.06.2006

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


Mam trigger ktory sprawdza przed kazdym update czy dana kwota znajduje sie na koncie uzytkownika jezeli nie to nie dochodzi do update. I teraz na stronie (czuli z php) chcialabym zeby wyswietlala sie informacja : Brak takiej sumy na koncie". Tylko nie wiem jak sprawdzic czy update nastapil czy nie.
Go to the top of the page
+Quote Post
SongoQ
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Hm jesli trigger nie dopusci to update to niech wywala blad. Trigger przed dodaniem.
Go to the top of the page
+Quote Post
mdudi
post
Post #5





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 3.06.2006

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


Z tego co mi wiadomo komuniakt o bledzie zwraca RAISE EXCEPTION i przerywa transkacje, tylko ze jak dalam ta komende to na stronie wywalalo mi blad. I wlasnie nie wiem czy jest inna metoda iformujaca o bledach.
Go to the top of the page
+Quote Post
Zbłąkany
post
Post #6


Administrator serwera


Grupa: Developerzy
Postów: 521
Pomógł: 13
Dołączył: 2.04.2004
Skąd: 52°24' N 16°56' E

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


RAISE obsługuje następujące typy komunikatów:
  • DEBUG[1-5]
  • INFO
  • NOTICE
  • WARNING
  • LOG
  • EXCEPTION
Możesz wyrzucić dowolny typ, a w php przejąć to exception, bądź error handlerem. Polecałbym PDO bo ma opcję wyciszania błędów (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) .

Edit: Poprawiłem listę typów (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
mdudi
post
Post #7





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 3.06.2006

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


A mozesz podac przyklad takiego przechwycenia bledu bo gubie sie w tych ang. materialach :/
Z gory dziekuje.
Go to the top of the page
+Quote Post
Zbłąkany
post
Post #8


Administrator serwera


Grupa: Developerzy
Postów: 521
Pomógł: 13
Dołączył: 2.04.2004
Skąd: 52°24' N 16°56' E

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


A poza tym pg_affected_rows() działa przy transakcjach (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) .
Dla PDO czy zwykłego sterownika?
Go to the top of the page
+Quote Post
mdudi
post
Post #9





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 3.06.2006

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


No tak dziala ale zwraca 0, bo on czyta tylko pierwszy wiersz a pierwszy wiersz to begin, w manualu nawet o tym pisza.
Dla zwyklego sterownika (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) .
Go to the top of the page
+Quote Post
Zbłąkany
post
Post #10


Administrator serwera


Grupa: Developerzy
Postów: 521
Pomógł: 13
Dołączył: 2.04.2004
Skąd: 52°24' N 16°56' E

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


Daj tak:
  1. <?php
  2. pg_query('BEGIN TRANSACTION;');
  3. pg_query('SET TRANSACTION ISOLATION LEVEL SERIALIZABLE READ WRITE');
  4. $q = pg_query('INSERT INTO ...;');
  5. if (pg_affected_rows($q) === 1) {
  6. pg_query('COMMIT TRANSACTION;');
  7. print 'tak';
  8. } else {
  9. pg_query('ROLLBACK TRANSACTION;');
  10. print 'nie';
  11. }
  12.  
  13. ?>

a na pewno pokaże czy zmodyfikował wiersz (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) .

A co do error handler to polecam to. Przejrzyj kod i przykłady, a zrozumiesz, jak działa error handler i jak napisać swój własny (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
mdudi
post
Post #11





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 3.06.2006

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


Dzieki wielkie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) .
Go to the top of the page
+Quote Post

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 - 18:57