Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php+mysql] Otwieranie połączeń do MySQL
Forum PHP.pl > Forum > Przedszkole
misieq
Sytuacja: napsiałem sobie prostą klasę do obsługi połączeń mysql (na podstawie pewnego artykułu smile.gif), klasę obsługi sesji, autoryzacji itp itd. Ogólnie rzecz biorąc w tych klasach korzystam z mysql'a. I tutaj pytanie: w jaki sposób łaczyć się z bazą danych? Chodzi mi o to, czy przy każdej funkcji klasy otwierać nowe połączenie a po zakończeniu zamykać je? Czy otworzyć jedno "megapołaczenie" winksmiley.jpg na początku skryptu, potem używać klas i na końcu zamknąć je?

Sorki, jesli to pytanie jest "lame" ale jakoś nie znalazłem odpowiedzi na pytanie a obiektowo dopiero wczoraj zacząłem się w php bawić i brakuje mi takich "wzorców" dla OOP. Dzięki z góry za odpowiedź,

msq
treewood
Mysle, ze otwarcie stalego polaczenia (jesli korzystasz z serwera bazodanowego zewnetrznego) mysql_pconnect jest dobrym rozwiazaniem. Napewno nie laczyc sie z serwerem za kazdym razem gdy zapodajesz jakies zapytanie SQL'owe gdyz rozwiazanie to nie jest wydajne.
misieq
No właśnie tak mi się zdawało, że otwieranie i zamykanie nie może być za wydaje. Dzięki wielkie za odpowiedź.

EDIT: Powstaje problem przy tym mysql_pconnect: za połączenia odpowiada plik database.php, ale jak wiadomo nie tylko w nim używam zapytań MySQL. Wszystkie pliki są includowane do index.php - ale php "nie widzi" obiektu gdy zainicjuję połączenie w index.php a potem będę próbował odwołać się w którymś z includeowanych plików.

EDIT2: Nikt się nie skusi, żeby coś proadzić? rolleyes.gif Próbowałem to wyguglać, ale jakoś same tutoriale o klasach wychodzą.
revyag
Jeśli do index.php zaincludujesz pliczek konfiguracyjny z danymi potrzebnymi do połączenia z bazą. To wszystko co będziesz includował będzie korzystać z tego połączenia. Jeśli tak nie jest to źle includujesz lub łączysz się bazą.
misieq
  1. <?
  2. include ('database.php');
  3. include ('auth.php');
  4. include ('session.php');
  5. include ('funcs.php');
  6.  
  7.  
  8. if (isset($_POST['login'])) {
  9. $db = new database (MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_DB);
  10. $auth = new auth($_POST['login'], $_POST['password']);
  11. if ($auth -> userid != 0) {
  12. $session = new session($auth -> userid);
  13. $user = new user();
  14. }
  15. $db -> close();
  16. }
  17. ?>


new database uruchamia połączenie mysql_pconnect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) i wybiera bazę MYSQL_DB
Ale połączenia tego "nie widać" już w pliku auth.php (podejrzewam, że w pozostałych też, ale zatrzymuje się już tutaj). Nie wiem czy dobrze Cie zrozumiałem revyag ale to powinno działać.

Error phpca:
Fatal error: Call to a member function on a non-object in /adresik/auth.php on line <nrlinii>
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.