Post
#1
|
|
|
Grupa: Developerzy Postów: 823 Pomógł: 12 Dołączył: 18.12.2005 Ostrzeżenie: (0%)
|
Witam. Od kilku dni zajmuje się bardzo dziwnym przypadkiem utraty połączenia z bazą danych. Dokładniej: destruktor jednej instancji przerywa połączenie z bazą danych przy tworzeniu kolejnej.
Ok, przykład najprostrzego połączenia z bazy danych, testuję tutaj źródło połączenia (resource)
Test wyszedł (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) źródło połączenia jest zaraz po połączeniu i przed rozłączeniem. Ok, przyjmijmy, że połączenie jest ustanawiane przez klasę. Przykład:
Jak widzimy w linii testu: ciągle niszczymy poprzednią instancję połączenia nadpisując drugą, przez co połowa połączeń nie zamyka się (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) A co jak chcę przy pierwszym nadpisaniu wysłać zapytanie metodą (nieistniejącą w mojej powyższej klasie) Execute(), która sprawdza czy połączenie jest is_resource()? Wówczas nie wykona sie, tylko wywali mi wyjątek (załóżmy że wywalam wyjątek). Moje pytanie brzmi: Co zrobić, aby przy nadpisaniu zawartości zmiennej (w tym przypadku obiektu) połączenie spokojnie się zamknęło? P.S. To nie jest mój problem, ale zawsze mnie ciekawił - dobry temat do dyskusji i szerokie pole popisu speców od php. Może wspólnie wyciągniemy jakieś wnioski. Pozdrawiam, Athlan (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Ten post edytował Athlan 15.12.2006, 17:24:03 |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 800 Pomógł: 0 Dołączył: 26.11.2005 Skąd: Nowy Sącz Ostrzeżenie: (0%)
|
Nie rozumiem za bardzo o co ci chodzi?
|
|
|
|
Post
#3
|
|
|
Grupa: Developerzy Postów: 823 Pomógł: 12 Dołączył: 18.12.2005 Ostrzeżenie: (0%)
|
-.-"
Prościej wytłumaczyć się nie dało, przykłady napisałem (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Chodzi o to, że po nadpisaniu instancji tej samej klasy w zmiennej co drugie połączenie źle się zamyka. Bug? Przy okazji Wesołych Świąt. Athlan (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
|
Post
#4
|
|
|
Grupa: Zarejestrowani Postów: 800 Pomógł: 0 Dołączył: 26.11.2005 Skąd: Nowy Sącz Ostrzeżenie: (0%)
|
Cytat >> connectiong for 1 instance >> connectiong for 2 instance << disconnectiong for 1 instance >> connectiong for 3 instance << disconnectiong for 2 instance Error thrown: try to close missing connection at 2 instance with resource id Resource id #2! >> connectiong for 4 instance << disconnectiong for 3 instance >> connectiong for 5 instance << disconnectiong for 4 instance Error thrown: try to close missing connection at 4 instance with resource id Resource id #3! << disconnectiong for 5 instance Tutaj nawala, albo funkcja is_resource albo jest sporo namieszane z czasami życia. Ale jak zmienie minimalnie kod :
Otrzymuje : Cytat >> connectiong for 1 instance
<< disconnectiong for 1 instance >> connectiong for 2 instance << disconnectiong for 2 instance >> connectiong for 3 instance << disconnectiong for 3 instance >> connectiong for 4 instance << disconnectiong for 4 instance >> connectiong for 5 instance << disconnectiong for 5 instance Ten post edytował Turgon 25.12.2006, 11:23:09 |
|
|
|
Post
#5
|
|
|
Grupa: Developerzy Postów: 823 Pomógł: 12 Dołączył: 18.12.2005 Ostrzeżenie: (0%)
|
Turgon: właśnie chodzi o to, aby połączenie zaykało się samo.
Zastanawiam się, czy warto woggóle zamykac połączenie z bazą danych. Teoretycznie zamyka się (bezpiecznie) samo. Jego nadpisanie wartością NULL również bezpiecznie je zamyka. Ciekawe po co jest funckja mysql_close(), czyżby nadpisywała połącznie wartością NULL? Szeroki temat do dyskusji, ale Vengenace na gg, on nie zamyka połączenie i jest dobrze (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
|
Post
#6
|
|
|
Grupa: Zarejestrowani Postów: 800 Pomógł: 0 Dołączył: 26.11.2005 Skąd: Nowy Sącz Ostrzeżenie: (0%)
|
W sumie przyznam się, że zamykam połączenie tylko i wyłącznie kiedy sytuacja tego wymaga.
Chodzi mi po głowie kilka refleksji. Odświeżaj stronę kilka razy i za każdym razem otwieraj nowe połączenie i sprawdź jakie mają Id... Hmm... Zaraz napiszę skrypta testowego. |
|
|
|
![]() ![]() |
|
Aktualny czas: 21.12.2025 - 02:09 |