mdudi
3.06.2006, 14:40:28
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??
SongoQ
3.06.2006, 14:43:35
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.
mdudi
3.06.2006, 15:13:43
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.
SongoQ
3.06.2006, 15:25:13
Hm jesli trigger nie dopusci to update to niech wywala blad. Trigger przed dodaniem.
mdudi
3.06.2006, 15:42:12
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.
Zbłąkany
3.06.2006, 17:10:56
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

.
Edit: Poprawiłem listę typów
mdudi
3.06.2006, 19:04:11
A mozesz podac przyklad takiego przechwycenia bledu bo gubie sie w tych ang. materialach :/
Z gory dziekuje.
Zbłąkany
3.06.2006, 22:44:30
A poza tym pg_affected_rows() działa przy transakcjach

.
Dla PDO czy zwykłego sterownika?
mdudi
4.06.2006, 00:38:49
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

.
Zbłąkany
4.06.2006, 18:26:32
Daj tak:
<?php
pg_query('SET TRANSACTION ISOLATION LEVEL SERIALIZABLE READ WRITE'); } else {
}
?>
a na pewno pokaże czy zmodyfikował wiersz

.
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
mdudi
4.06.2006, 19:52:14
Dzieki wielkie

.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.