![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 243 Pomógł: 0 Dołączył: 30.11.2003 Ostrzeżenie: (0%) ![]() ![]() |
Mam skrypt o następującej konstrukcji:
Czy taka konstrukcja jest poprawna? Chodzi mi o to, czy jeśli błąd wystąpi na etapie Operacji1, a Operacja2 i Operacja3 się powiodą, to czy mysql_error() również zwróci kod błędu? Ewentualnie - jak inaczej to oprogramować? I druga rzecz... Transakcja jest traktowana przez bazę w kontekście aktualnego identyfikatora połączenia z bazą, prawda? Ale którego? Każdy mój juzer łączy się z bazą z użyciem (z punktu widzenia bazy) tego samego loginu i hasła. W rezultacie zapytanie o CONNECTION_ID() daje za każdym razem inny rezultat, ale:
zwraca mi w każdym przypadku Resource id #2 - dlaczego? Czy mogę w ten sposób bezpiecznie używać transakcji, nie martwiąc się, ze jeden juzer wycofa transakcję drugiego? Pozdrawiam, K |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Czy wystąpił błąd sprawdzaj po każdej operacji i jeśli jest to wtedy rollback, a nie jak u ciebie sprawdzasz na koniec. To bez sensu
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 560 Pomógł: 0 Dołączył: 15.07.2003 Skąd: Kwidzyn Ostrzeżenie: (0%) ![]() ![]() |
nawiazanie polaczenie poprzez wywolanie skryptu twozy inny identyfikator polaczenia pomimo ze uzywasz tych samych danych do polaczenia, jedynie jesli w skrypcie po raz kolejny bedziesz chcial nawiazac polaczenie a wczesniej nie zostanie ono zamkniete to manual mowi wyraznie:
Cytat Przy drugim wywołaniu mysql_connect() z tymi samymi argumentami, nie będzie nawiązywane nowe połączenie, lecz zwrócony zostanie identyfikator już otwartego połączenia. Argument co do obslugi sesji ja stosuje cos takiego: wynik kazdego zapytania dodaje do tablicy np.
jesli gdzies wynikl blad to w tablicy bedzie gdzies false potem przed zaakceptowaniem trasakcji daje do sprawdzenie czy w tablicy jest false:
moze robie to zle ale tak soie to wykombinowalem i z tego co sprawdzalem to dziala poprawnie Ten post edytował Kinool 17.05.2005, 12:57:54 -------------------- |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 243 Pomógł: 0 Dołączył: 30.11.2003 Ostrzeżenie: (0%) ![]() ![]() |
Czy wystarczy zatem zrobić to tak:
? @Kinnol: A czy nie ma znaczenia, że zmienna $connection zwraca mi za każdym razem Resource id #2? Dziękuję i pozdrawiam, K Ten post edytował ktuvok 17.05.2005, 12:55:51 |
|
|
![]()
Post
#5
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
ale jaki jest sens wykonywać operację 2 i 3 i obciązać serwer skoro operacja 1 się nie powiodła
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]() ![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 243 Pomógł: 0 Dołączył: 30.11.2003 Ostrzeżenie: (0%) ![]() ![]() |
OK, przerobiłem obsługę błędu na bardziej sensowną i działa.
Ale chciałbym jeszcze wiedzieć, czy mogę bezpiecznie używać transakcji, skoro identyfikator połączenia zwracany mi przez mysql_connect() jest zawsze równy Resource id #2. Czy transakcja odbywa się w ramach tego właśnie identyfikatora, czy w ramach CONNECTION_ID() zwracanego przez MySQL? TO zasadnicza różnica... Czy ktoś ma na ten temat miarodajne dane? Pozdrawiam, K |
|
|
![]()
Post
#7
|
|
![]() 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%) ![]() ![]() |
Podobnie twierdze jak @nospor nie ma sesnu przetwazac dalej zapytan jesli ktoros z wczesniejszych zapytan nie powiodlo sie. Dlaczego? - Nieoptymalne dla bazy i dla serwera www, a po 2 to tak jak bys wykonywal cos co naprawde jest Ci nie potrzebne.
-------------------- |
|
|
![]() ![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 243 Pomógł: 0 Dołączył: 30.11.2003 Ostrzeżenie: (0%) ![]() ![]() |
OK, czyli jakoś tak to będzie:
Chyba, że da się jakoś prościej... Ma ktoś pomysł? A co z moim (nieszczęsnym) pytaniem nr 2? |
|
|
![]()
Post
#9
|
|
![]() 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%) ![]() ![]() |
Odnosnie kodu no to cos w tym stylu.
Cytat I druga rzecz... Transakcja jest traktowana przez bazę w kontekście aktualnego identyfikatora połączenia z bazą, prawda? TAK! Cytat Ale którego? Każdy mój juzer łączy się z bazą z użyciem (z punktu widzenia bazy) tego samego loginu i hasła. W rezultacie zapytanie o CONNECTION_ID() daje za każdym razem inny rezultat. Inne polaczenie z baza, to jest tylko resource polaczenia nic wiecej i transakcja dziala tylo na tym polaczeniu. Troche dziwne by bylo jak by 1 user mogl wycofywac operacje 2 userowi Cytat Czy mogę w ten sposób bezpiecznie używać transakcji, nie martwiąc się, ze jeden juzer wycofa transakcję drugiego? Tak, jesli nie dowierzasz to poczytaj o transakcjach, radze tez poczytac o ACID. Kazda ksiazka do SQLa (no wiekszosc teori baz danych) zawiera tego typu materialy. -------------------- |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 14 Pomógł: 0 Dołączył: 8.03.2005 Ostrzeżenie: (0%) ![]() ![]() |
Cytat(ktuvok @ 2005-05-17 13:59:09) ...Czy transakcja odbywa się w ramach tego właśnie identyfikatora, czy w ramach CONNECTION_ID() zwracanego przez MySQL? TO zasadnicza różnica... a po co wiele connect-ów? ![]() na początku pc_connect i do widzenia. (chyba) w przypadku wykorzystania klasy do DB (np AdoDb) w ogole nie ma problemu poniewaz jesli wywolasz metode execute (tutaj odpowiedzialna za zapytania) to funkcja pierwsze sprawdzi czy nie dysponuje juz otwartym polaczeniem i jesli dysponuje to skorzysta wlasnie z tego konkretnego polaczenia |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 12.04.2006 Ostrzeżenie: (0%) ![]() ![]() |
no dobra ale co jak mam już otwarte połączenie adodb i w dalszej części pliku php inicjalizuję obiekt php korzystający z tej samej bazy który w konstruktorze otwiera nowe połączenie za pomocą adodb -> czy adodb sprawdza czy istnieje już połączenie czy po prostu otwiera następne z tymi samymi parametrami?
Kod $conn = ADONewConnection(getDBDriverNameForADODB());
$conn->Connect($db_ip, $login, $pass, $db_name); // to obiekt który otwiera nowe połączenie $tabela = new tabela($sql, $columnes_definition); -------------------- kus
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 16:54 |