Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Nawiązywanie połączenia z MySql - jaka zasada?
Forum PHP.pl > Forum > Przedszkole
ednet
Witam
Mam dość obszerny systemik w php. Przy niektórych wywołaniach wykonywanych jest bardzo wiele funkcji jednocześnie. Do tej pory w każdej funkcji includuję plik connect.php z poniższą zawartoscią:
  1. <?
  2. $dbhost = "localhost";
  3. $dbuname = "qqq";
  4. $dbpass = "qqq";
  5. $dbname = "_wwww";
  6.  
  7. $conn = mysql_connect("$dbhost", "$dbuname", "$dbpass");
  8. mysql_select_db("$dbname", $conn);
  9. ?>

Jest to oczywiście mało wydajne. Jak można to zmienić?

Pomysł 1:
Do każdej funkcji przekazywać jako parametr zmienną $conn. Skuteczne ale mało praktyczne w mojej sytuacji bo nie chcę zmieniać parametrów we wszystkich funkcjach. Dodatkowo w większych systemach nie spotkałem raczej takiego rozwiązania.

Pomysł 2:
Ustanowienie zmiennej $conn jako globalnej i chyba nie trzeba będzie includować connect.oho do wszystkich funkcji aby dzialal mysql. Najwygodniejsze rozwiązanie, jednak nie wiem jak się ma to z bezpieczeństwem.

Pomysł 3:
Połaczenie jest umieszczone w funkcji .

  1. <?php
  2. function lacz_bd()
  3. {
  4.  $wynik = @mysql_pconnect("localhost", "zawartosc", "haslo");
  5.  if (!$wynik)
  6. return false;
  7.  if (!@mysql_select_db("zawartosc"))
  8. return false;
  9.  
  10.  return $wynik;
  11. }
  12.  
  13.  
  14. ?>

Wywołanie w przykładowej funkcji:
  1. <?php
  2. function pobierz_rekord_artykulu($artykul)
  3. {
  4. $lacz = lacz_bd();
  5. $sql = "select * from artykuly where id = '$artykul'";
  6. $wynik = mysql_query($sql, $lacz);
  7. return(mysql_fetch_array($wynik));
  8. }
  9.  
  10. ?>


W tym sposobie nie trzeba się martwić o wciąganie połączenia jako parametru. Ta funkcja jest widoczna w innych funkcjach jednak obawiam się że z każdym wywołaniem funkcji lacz_bd() nawiązywane jest połączenie z mysql. Jesli wykonywanych jest np 30 różnych funkcji działających na bazie to jest nawiązywanych tyle samo połączeń. Czy w pomysle 2 jest jedno nawiązanie połączenia czy nawiązywane jest ono w każdej funkcji posiadającej jakieś zapytanie SQL?

Wiem że można użyć mysql_pconnect jednak szukam rozwiązania/zasady tworzenia połączenia z bazą. Funkcja mysql_pconnect nieraz jest wyłączona na serwerze i działa tylko z php działającym jako moduł.

Jak można rozwiązać ten problem?

ednet


~mike_mech
batman
Napisz sobie funkcję napisz sobie funkcję rozlacz, w któerj bedziesz zamykał połączenie z bazą danych i już.
Najlepiej jak napiszesz klasę odpowiedzialną za operacje na bazie danych i za jej pomocą bedziesz się łączył z bazą danych, wyciągał informacje oraz zamykał połączenie.
ednet
Cytat(batman @ 2005-10-27 21:52:05)
Najlepiej jak napiszesz klasę odpowiedzialną za operacje na bazie danych i za jej pomocą bedziesz się łączył z bazą danych, wyciągał informacje oraz zamykał połączenie.

A który z tych 3 pomysłów najbardziej Ci by odpowiadał?

ednet
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.