Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Klasa bazy banych z użyciem mysqli
gcdreak
post
Post #1





Grupa: Zarejestrowani
Postów: 365
Pomógł: 8
Dołączył: 16.12.2008

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


Witam!
Mam taką klasę:
Kod
class DB extends mysqli{
      
      private static $db;
      
      public function connect(){
          if(!self::$db){
              self::$db = @new mysqli('localhost', 'user', 'pass', 'base');
              if(@ self::$db->connect_errno){
                  throw new Exception('Nie można połączyć się z bazą danych.');
              }
          }else{
              return self::$db;
          }
      }
      
      public function query($zapytanie){
          return self::$db->query($zapytanie);
      }
      
      public function prepare($zapytanie){
          return self::$db->prepare($zapytanie);
      }
  }

Używam jej w skrycie logowania. Na początku nie miałem w niej metod query() i prepare(). Kiedy je wywoływałem to nie zwracały obiektu. Dopisałem dwie wyżej wymienione metody i wszystko działa.
Czy jednak jest to konieczne, aby tworzyć własne metody, bo przecież moja klasa DB dziedziczy po mysqli?

Ten post edytował gcdreak 7.06.2009, 10:29:24
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
-=Peter=-
post
Post #2





Grupa: Zarejestrowani
Postów: 304
Pomógł: 51
Dołączył: 4.02.2005
Skąd: Kraków

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


Za pomocą tego kodu tworzysz 2 połączenia z bazą danych... Oto przykład:
  1. <?php
  2. $db = new DB();//pierwsze połączenie z wartosciami domyslnymi z php.ini, wywołanie konstruktora mysqli
  3. $db->connect();//drugie połączenie, które wykorzystujesz w swoich zapytaniach
  4. ?>

Albo zrób aby DB nie dziedziczyła po mysqli i metody zostaw takie jakie są (instancję mysqli przechowuj w składowej statycznej), albo zostaw dziedziczenie i rozszerzaj metody mysqli. Następnym rozwiązaniem jest ustawienie metody connect jako statycznej (coś na wzór singletonu), aby zwracała instancję klasy DB.

Ten post edytował -=Peter=- 7.06.2009, 12:10:43
Go to the top of the page
+Quote Post
gcdreak
post
Post #3





Grupa: Zarejestrowani
Postów: 365
Pomógł: 8
Dołączył: 16.12.2008

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


Wyrzuciłem fragment:
Kod
<span class="postcolor">extends mysqli</span>

i wszystko działa.
Dopisałem jeszcze:
Kod
public function __destruct(){
         self::$db->free;
     }


Czy w destruktorze powinienem też zamknąć połączenie z bazą?
Go to the top of the page
+Quote Post
erix
post
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Czy w destruktorze powinienem też zamknąć połączenie z bazą?

Skrypt zamyka połączenie samoczynnie przy kończeniu wykonywania skryptu (wyjątek: stałe połączenia, które po prostu zostają dla innych sesji).

A w destruktorze? Doświadczałem "dziwnych" rzeczy przy zamykaniu połączeń w destruktorze typu najróżniejsze błędy.
Go to the top of the page
+Quote Post
gcdreak
post
Post #5





Grupa: Zarejestrowani
Postów: 365
Pomógł: 8
Dołączył: 16.12.2008

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


A co myślisz o zwalnianiu wyników zapytania w destruktorze?
Go to the top of the page
+Quote Post
marcio
post
Post #6





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Cytat(gcdreak @ 8.06.2009, 13:33:48 ) *
A co myślisz o zwalnianiu wyników zapytania w destruktorze?

Ja przewaznie uzuwam do zamykania plikow chodz te chyba same tez automatyczne sie zamykaja jak w przypadku z baza (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) o ogolnie do niszczenia pol ktore uzylem w danej klasie.
Go to the top of the page
+Quote Post
gcdreak
post
Post #7





Grupa: Zarejestrowani
Postów: 365
Pomógł: 8
Dołączył: 16.12.2008

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


Niszczenie i zamykanie to jedno, a zwalnianie pamięci to drugie.
Go to the top of the page
+Quote Post
marcio
post
Post #8





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Cytat
Niszczenie i zamykanie to jedno, a zwalnianie pamięci to drugie.

Skoro dla ciebie to to samo to po co pytasz skoro wiesz lepiej.
Go to the top of the page
+Quote Post
gcdreak
post
Post #9





Grupa: Zarejestrowani
Postów: 365
Pomógł: 8
Dołączył: 16.12.2008

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


Dla mnie to nie to samo!
Go to the top of the page
+Quote Post
erix
post
Post #10





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Jeśli macie tak się przegadywać cały wątek, to od razu powiedzcie - przynajmniej nie będę musiał czekać, aby ostrzeżenia wlepić. (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Albo rzeczowa dyskusja poparta argumentami, albo sobie darujcie...
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 19.09.2025 - 22:45