Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MSSQL] Wielokrotne wykorzytsanie połączenia
Forum PHP.pl > Forum > Przedszkole
grzegorz_m
Witam.

Jak zorganizować manipulowanie na bd, przy wykorzystaniu jednego połączenia?

Ja zrobiłem to tak:

  1. <?
  2.   $cnn = null;
  3.   function database_connect()
  4.   {
  5.     global $cnn;
  6.     if(! $cnn = mysql_connect("localhost", "bbbb", "bbbb") || ! mysql_select_db("bbbb", $cnn))          
  7.        { 
  8.             echo 'error!';
  9.  
  10.    return false;
  11.  
  12.        }           
  13.     return true;    
  14.   }  
  15.   
  16.   function database_close()
  17.   {  
  18.       global $cnn;
  19.       mysql_close($cnn); 
  20.   }
  21.   
  22. ?>



Potem w skrypcie robię:

  1. <?php
  2. ...
  3.  
  4.  require 'mysql_server.php'; //skrypt wyżej
  5.  database_connect(); //funkcja skryptu powyżej
  6.  
  7. ...
  8.  
  9. //tutaj chcę korzytsać z $cnn (jako global)
  10.  
  11. ...
  12.  
  13. database_close(); //funkcja skryptu powyżej
  14. ?>


Niestety już przy wywołaniu funkcji database_close() mam błąd:

Warning: mysql_close(): supplied argument is not a valid MySQL-Link resource in [...]mysql_server.php on line 20
Gacek89
po pierwsze nie wiem po co Ci w takiej formie to bo moim zdaniem zbytnio Ci to nie ułatwia pracy

po drugie unikaj zmiennych globalnych!!

na twoim miejscu przepisał bym to na jakaś klasę, ale jak chcesz się z tym bawić to proponuje użyć var_dump() do wyrzucenia zmiennej $cnn w function database_close() 
grzegorz_m
No fakt z lenistwa wynikają dziwne rzeczy.

Teraz zrobiłem to tak

1)Klasa odpowiedzialna za połączenie z MySql

  1. <?
  2.  
  3. class MySqlConnect
  4. { 
  5.       private $cnn;      
  6.          
  7.       public function GetMyConnection()
  8.       {         
  9.         if($this->cnn)
  10.         {
  11.             return $this->cnn;
  12.         }
  13.         else
  14.         {
  15.             $this->cnn = @mysql_connect("localhost", "x", "y");     
  16.             mysql_select_db("z", $this->cnn);
  17.             return $this->cnn;
  18.         }                       
  19.       }  
  20.       
  21.       public function ConnectionClose()
  22.       {             
  23.         if($this->cnn)
  24.         {         
  25.           mysql_close($this->cnn);        
  26.         } 
  27.       }
  28. }    
  29. ?>



2)Najpierw tworzę klasę:

  1. <?php
  2. $MySqlConnect = new MySqlConnect();
  3. ?>


3)Potem przekazuję do wybranych funkcji parametr z połączeniem. Na przykład:

  1. <?php
  2. if($user->login($_POST['login'] , $_POST['passwd'],$MySqlConnect->GetMyConnection())==true)
  3. ?>


4)Zamykam połączenie na dole skryptu
  1. <?php
  2. $MySqlConnect->ConnectionClose();
  3. ?>


(Oczywiście zostanie ono zamknięte, jeśli było otwarte)



Co do nazewnictwa funkcji to jestem zwolennikiem stosowania NazwaFunckji i NazwaKlasy. Stosowałbym to również w innych nazwach, ale pewnie miałbym później problem z nazwami typu mysql_connect. Ale to tylko tak w ramach wyjaśnienia.



Sugestie co do kodu, który pokazałem?
Gacek89
no ja bym tego tak nierozwiazał. korzystasz tylko z jednej bazy danych tak?

bo jak tak to niezrecznie Ci bedzie cały czas operowac tymsamym odnośnikiem do połaczenia

to polecam Ci zrobic klase która w konstruktorze bedzie miała połczenie sie z db a w niej bedzie ewentualnie metoda która jako parametr przymie zapytanie do bd a w wyniku da odpowedz z bazy danych najlepiej w formie array

jeśli niewiesz to juz sa takie klasy dostepne w internecie obsługujace wygodnie mysql



tutaj masz jak tak klase napisac od podstaw
http://www.webinside.pl/php/artykuly/182
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.