Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MSSQL] Wielokrotne wykorzytsanie połączenia
grzegorz_m
post 25.11.2008, 21:34:32
Post #1





Grupa: Zarejestrowani
Postów: 22
Pomógł: 1
Dołączył: 10.07.2008
Skąd: Łódź

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


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
Go to the top of the page
+Quote Post
Gacek89
post 26.11.2008, 13:02:57
Post #2





Grupa: Zarejestrowani
Postów: 77
Pomógł: 8
Dołączył: 2.11.2007
Skąd: Katowice

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


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() 
Go to the top of the page
+Quote Post
grzegorz_m
post 26.11.2008, 18:33:56
Post #3





Grupa: Zarejestrowani
Postów: 22
Pomógł: 1
Dołączył: 10.07.2008
Skąd: Łódź

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


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?
Go to the top of the page
+Quote Post
Gacek89
post 26.11.2008, 19:51:21
Post #4





Grupa: Zarejestrowani
Postów: 77
Pomógł: 8
Dołączył: 2.11.2007
Skąd: Katowice

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


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
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:32