Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Baza Danych, połączenia, wykonywanie akcji
eai
post
Post #1





Grupa: Zarejestrowani
Postów: 367
Pomógł: 10
Dołączył: 20.05.2005

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


Witam,
od pewnego czasu nurtuje mnie pewna kwestia zwiazana z bazami danych.

Otóż załóżmy że mam klasę obsługującą bazę MySQL a w innych klasach z niej korzystam.
W kazdej klasie nie jest przekazywany indentyfikator połączenia, w kazdej klasie tworzone jest nowe polączenie do bazy danych. Istotną sprawa przy tworzeniu aplikacji php jest szybkosć jej wykonywania, w takim przypadku kilka krotne nawiązywania połączenia z bazą danych mija się z celem.

Nasunął mi się pomysł żeby za każdym razem nie tworzyc nowego polączenia $db = new MySQL; tylko je przekazywać, i tu pojawia sie problem w jaki sposób przekazywać połączenie?

Czy lepiej w innych klasach przekazywać zmienną z obiektem MySQL w funkcji construct($mysql = null) czy może przekazywać identyfikatorem połączenia w zmiennej $GLOBALS?

Głównie chodzi o to żeby zapobiec tworzeniu nowych połączeń przy jednym wywołaniu strony, i jak najlepiej to zrobić?

Macie pomysly? W jaki sposób wy to rozwiązujecie.
Zapraszam do dyskusji (IMG:http://forum.php.pl/style_emoticons/default/dry.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
Kowalikus
post
Post #2





Grupa: Zarejestrowani
Postów: 111
Pomógł: 25
Dołączył: 23.07.2004

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


Jeśli korzystasz tylko z jednej bazy danych to: Singleton zapewni Ci, że będziesz miał tylko i wyłącznie jedną instancję tej klasy. Ewentualnie stwórz rejestr (Registry).
Go to the top of the page
+Quote Post
eai
post
Post #3





Grupa: Zarejestrowani
Postów: 367
Pomógł: 10
Dołączył: 20.05.2005

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


I to mi zapewni że przy każdym wywołaniu klasy new Klasa(); nie będzie tworzyła sie nowa tylko przekazywała obiekt?
czy wywołuje obiekt::GetInstace(); ?

Ten post edytował eai 30.04.2007, 14:40:31
Go to the top of the page
+Quote Post
Kowalikus
post
Post #4





Grupa: Zarejestrowani
Postów: 111
Pomógł: 25
Dołączył: 23.07.2004

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


Wywołujesz obiekt::GetInstace() bo jak Singleton zakłada konstruktor jest prywatny wtedy new Klasa(); zgłosi error
Go to the top of the page
+Quote Post
LBO
post
Post #5





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


To już nie lepiej identyfikator połączenia trzymać w zmiennej statycznej?
Go to the top of the page
+Quote Post
menic
post
Post #6





Grupa: Zarejestrowani
Postów: 493
Pomógł: 0
Dołączył: 14.06.2003
Skąd: Tomaszów Lubelski/Rzeszów

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


Statycznie bedzie o wiele wygodniej. Ew. Mozesz utworzyc osobną klase która łaczy sie z bazą i utrzymuje (zwraca) połączenie.
Go to the top of the page
+Quote Post
virusek856
post
Post #7





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 13.01.2006

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


możesz skorzystać również z mysql_pconnect. z wywołaniem mysql_pclose na końcu aplikacji
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: 14.09.2025 - 15:56