Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> PHP + MSSQL + Transakcja
peyn
post
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 20.09.2004
Skąd: Konin

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


Witajcie

Mmam takie cos:
  1. <?php
  2.  
  3. $q = &#092;"BEGIN TRANSACTION Tran;\";
  4. $q.= &#092;"Insert into tabela (pole) values ('1');\";
  5. mssql_query($q);
  6.  
  7. $m = mssql_get_last_message();
  8.  
  9. if ($m == '') 
  10. {
  11. mssql_query(&#092;"COMMIT TRANSACTION Tran;\");
  12. }
  13. else
  14. {
  15. mssql_query(&#092;"ROLLBACK TRANSACTION Tran;\");
  16. };
  17.  
  18. ?>


I teraz tak, w tabeli mam klucz na ta kolumne uniemozliwiajacy wpisanie powtornie tej samej wartosci. Mam tam tez juz jeden rekord z wartoscia '1'. A wiec wykonanie tego zapytania zwroci blad. I rzeczywiscie zwraca, problem jedynie w tym ze get_last_message mi go nie zwraca :-(

Moje pytanie: czy ktos juz przerabial transakcje w php + mssql? Jakie jest na to rozwiazanie? biggrin.gif
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
radzaw
post
Post #2





Grupa: Zarejestrowani
Postów: 99
Pomógł: 0
Dołączył: 14.07.2003
Skąd: z epoki lodowcowej

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


zauwaz, ze mssql_query zwraca FALSE w przypadku bledu, czyli

$m = mssql_query($query);
if ($m == FALSE) ...


--------------------
Blog :: Development platform :
Windows 2003 Enterprise Server | Gentoo Linux
Go to the top of the page
+Quote Post
zalew
post
Post #3





Grupa: Zarejestrowani
Postów: 407
Pomógł: 0
Dołączył: 24.10.2002
Skąd: warszawa

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


zabierasz sie za porzadna baze danych, zeby jej dzialanie kontrolowac warunkami w inerfejsie?
nie po to wymyslono transakcje, zeby przerzucac zwyklego 'if zapytanie sie udalo' na interfejs..

Ten post edytował zalew 20.09.2004, 20:40:06


--------------------
Go to the top of the page
+Quote Post
peyn
post
Post #4





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 20.09.2004
Skąd: Konin

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


radzaw: no wiem wiem, ale jednoczesnie zwraca tez bledy na strone / do loga (zalezy jak kto sobie ustawi) i chyba przez to nie moge pozniej wyslac zadnego headera (glownie chodzi mi o location).

Prawde mowiac nie wiem na 100% czy to to, ale tak wnioskuje, w kazdym razie nic na strone nie wywalam, wysylane sa jedynie bledy do loga, a header nie idzie wiec podejrzewam ze to to.

zalew: wiem ze mozna to zrobic na bazie ale akurat w tym wypadku potrzebuje zeby skrypt wiedzial czy sie powiodlo czy nie. IMHO bez sensu by bylo zebym sprawdzal na bazie czy sie powiodlo czy nie, robil rollbacka albo commita w zaleznosci od wyniku, pozniej zwracal wynik i jeszcze raz w php bym sprawdzal wynik i np wyswietla tak lub nie. Tzn tak mi sie wydaje ale moze masz jakis fajowy pomysl to wal smialo biggrin.gif
Go to the top of the page
+Quote Post
zalew
post
Post #5





Grupa: Zarejestrowani
Postów: 407
Pomógł: 0
Dołączył: 24.10.2002
Skąd: warszawa

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


podstawowa zasada: baza to baza, interfejs to interfejs. wszystkie zadania, ktore naleza do bazy danych powinno sie wykonywac za jej pomoca w miare mozliwosci, ana mozliwosci m$ nie ma co narzekac..
akurat szczerze nie wiem co ty chcesz zrobic poza tym, ze sprawdzic czy insert sie udal.. ale uzaleznianie operacji bazy od ifa w interfejsie - wg mnie od dupy strony

napisze jak ja bym to zrobil przykladowo, jesli dobrze cie rozumiem
  1. CREATE FUNCTION insertmydata (integer, text) returns BOOLEAN AS '
  2. begin insert into mytable (id, comment) values ($1, $2);
  3. if (@@ROW_COUNT>0) then
  4. return true;
  5. else
  6. return false;
  7. end if;
  8. end;'

(skladnia moze byc do poprawienia w ktoryms miejscu, bo ostatnio w pgsqlu siedze glownie)

wywolujesz ta funkcje i albo ci wstawi do bazy albo zwroci false..
potem
  1. <?php
  2. if ($function) {
  3. //zrob costam
  4. } else {
  5. //zrob co innego, wroc do forumalrza, nie wiem..
  6. }
  7. ?>



wiesz, masz tyle mozliwosci po stronie bazy zeby kontorlowac wpisanie rekordu, zalozyc trigger tkory to sprawdzi i zincrementuje id albo odrzuci transakcje, zdefiniowana funkcje, ktora wszystko sprawdzi; ze nie rozumiem totalnie po co skladac ifami query po stronie php.. troche jak poczakujace mysqlowanie (imo, bez urazy)..

Ten post edytował zalew 21.09.2004, 00:12:01


--------------------
Go to the top of the page
+Quote Post
peyn
post
Post #6





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 20.09.2004
Skąd: Konin

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


Hmm, nie ma problemu, konstruktywna krytyka jest jak najbardziej wskazana, przynajmniej sie czegos naucze.

Co do tej procedury to w sumie rzeczywiscie chyba tak zrobie. Z tym ze po prostu dziabne jedna wielka procedure na bazie, do ktorej jako argument bede przesylal zapytanie bo tworzyc do kazdego zapytania nowa procedure to troche bez sensu.

Chyba ze zrobie w php funkcje ktora bedzie tylko tworzyla procedure na chwilke z podanym w paramterze zapytaniem biggrin.gif Sam juz nie wiem...

Co do triggerkow to ok jesli jest to robione na mojej tabeli. Natomiast pracujac na czyjejs tabeli musialbym ciagle sprawdzac czy przy ostatnim update'cie np ta osoba nie wywalila mojego trigerka albo nie zmienila czegos.

pozdrowienia
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: 21.08.2025 - 20:32