Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Nawiązywanie połączenia z MySql - jaka zasada?, Jak powinno się to robić.
ednet
post 27.10.2005, 20:37:07
Post #1





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 28.06.2005

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


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
Go to the top of the page
+Quote Post
batman
post 27.10.2005, 22:52:05
Post #2





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




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.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
ednet
post 28.10.2005, 07:55:18
Post #3





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 28.06.2005

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


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 08:52