Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Co sądzicie o tym kodzie?
Forum PHP.pl > Forum > Przedszkole
marekc12
Witam!

Piszę CMSa, napisałem klasę, która będzie takim jakby 'jądrem' tego mojego CMSa biggrin.gif Czyli po prostu klasa do obsługi bazy danych...

Kod działa, chcę tylko wiedzieć, czy w dobry sposób to rozwiązałem:) To moja pierwsza tak rozbudowana klasa :-) hehe.

Dzieki z gory za wszelkie sugestie, mam nadzieje ze ktoś bardziej doświadczony oceni kod. Pozdrawiam!



  1. <?php
  2.  class BazaDanych
  3.  {
  4.      private static $sqlSerwer = 'localhost';
  5.      private static $sqlUser = 'uzytkownik';
  6.      private static $sqlPass = 'haslo';
  7.      private static $sqlName = 'nazwabazy';
  8.      private static $sqlConn;
  9.      private static $idZapytania;
  10.      protected $tabela, $dane, $warunek, $flagi;
  11.   
  12.      public static function polacz() //metoda łącząca się z bazą danych
  13.      {
  14.          self::$sqlConn = mysql_connect( self::$sqlSerwer, self::$sqlUser, self::$sqlPass );
  15.          if( !self::$sqlConn ) throw new Exception(1);
  16.       
  17.          if(!mysql_select_db( self::$sqlName, self::$sqlConn ))
  18.              throw new Exception(2);
  19.      }
  20.   
  21.      public static function rozlacz() //metoda która rozłącza nas z bazą danych
  22.      {
  23.          if(!mysql_close( self::$sqlConn ))
  24.              throw new Exception(3);
  25.      }
  26.   
  27.      public static function filtrMysql($zmienna) //metoda, dzięki której możemy filtrowć dane
  28.      {
  29.          if(get_magic_quotes_gpc())
  30.              $zmienna = stripslashes($zmienna);
  31.          $zmienna = mysql_real_escape_string($zmienna);
  32.       
  33.          return($zmienna);
  34.      }
  35.  
  36.      private static function zapytanie($tekstZapytania) //metoda wywołująca zapytanie do bazy
  37.      {
  38.          if(!self::$idZapytania = mysql_query( $tekstZapytania, self::$sqlConn ))
  39.              throw new Exception(4);
  40.          return;
  41.      }
  42.   
  43.  
  44. // poniższe metody tworzą tekst zapytania do bazy danych i wysyłają je do metody 'zapytanie'
  45.  
  46. // Do tego celu wykorzystują zmienne: $this->tabela, $this->dane, $this->warunek, $this->flagi - te zmienne są zmiennymi obiektów innych klas(klas-dzieci) -zobacz drugi kod, na samym dole (class Uzytkownicy extends BazaDanych)  :)
  47.  
  48.      protected function dodaj() //metoda dodająca nowe rekordy do bazy danych
  49.      {
  50.          foreach($this->dane as $klucz => $wartosc)
  51.              $temp[] = '`'.$klucz.'`';
  52.       
  53.          self::zapytanie( 'INSERT INTO ' . $this->tabela . ' (' . implode(&#092;", \", $tekstZapytania) . ') VALUES (' . implode(\", \", $this->dane) . ')' );
  54.          return;
  55.      }
  56.   
  57.      protected function usun() //metoda usuwająca rekordy z bazy danych
  58.      {
  59.          self::zapytanie( 'DELETE FROM ' . $this->tabela . ' WHERE ' . $this->warunek );
  60.          return;
  61.      }
  62.   
  63.      protected function edytuj() //metoda edytująca rekordy w bazy danych
  64.      {
  65.          foreach($this->dane as $klucz => $wartosc)
  66.              $tekstZapytania[] = '`'.$klucz.'` = ' . $wartosc;
  67.       
  68.          self::zapytanie( $tekstZapytania = 'UPDATE ' . $this->tabela . ' SET ' . implode(&#092;", \", $temp) . ' WHERE ' . $this->warunek );
  69.          return;
  70.      }
  71.   
  72.      protected function odczytaj() //metoda odczytująca rekordy z bazy danych, zwraca odczytane dane w postaci dwuwymiarowej tabeli
  73.      {
  74.          foreach($this->dane as $klucz => $wartosc)
  75.              $temp[] = '`'.$wartosc.'`';
  76.       
  77.          self::zapytanie( 'SELECT ' . implode(&#092;", \", $temp) . ' FROM ' . $this->tabela . ' ' . $this->flagi );
  78.       
  79.          while($wiersz = mysql_fetch_row(self::$idZapytania))
  80.              $wynik[] = $wiersz;
  81.                   
  82.          return($wynik);
  83.      }
  84.  }
  85. ?>


  1. <?php
  2.  class Uzytkownicy extends BazaDanych
  3.  {
  4.      function uzytkownicy()
  5.      {
  6.          $this->tabela = '`users`';
  7.      }
  8.  
  9.      public function usun($warunek)
  10.      {
  11.          $this->warunek = $warunek;
  12.          parent::usun();
  13.      }
  14.   
  15.      public function edytuj($warunek, $nazwa, $uprawnienia, $haslo, $imie)
  16.      {
  17.          $this->warunek = $warunek;
  18.          $this->dane = array('nazwa' => $nazwa, 'uprawnienia' => $uprawnienia, 'haslo' => $haslo, 'imie' => $imie);
  19.          parent::edytuj();
  20.      }
  21.   
  22.      public function odczytaj()
  23.      {
  24.          $this->dane = array('nazwa', 'uprawnienia', 'haslo', 'imie');
  25.          return parent::odczytaj();
  26.      }
  27.  }
  28. ?>




Tak wywołuje kod:

  1. <?php
  2. BazaDanych::polacz();
  3.  $uzytkownicy = new Uzytkownicy;
  4.  $a=$uzytkownicy -> odczytaj();
  5.  BazaDanych::rozlacz();
  6. ?>
ayeo
Witam!

Rozwiązałeś to bardzo niedobrze smile.gif Czemu właściwości (z danymi do połączenia) są statyczne? Czemu z bazą nie łączy się konstruktor? Ten ostatni kod to całkowity bezsens! Poza tym wygodniej korzystać z SQLa niż z metody pobierającej 5 argumentów. Klasa użytkownicy powinna mieć właściwości odpowiadające kolumnom w bazie:

  1. <?php
  2. $user = new Uzytkownicy;
  3. $user->name = "Adam";
  4. $user->surname = "Kowalski";
  5. $user->select();
  6. echo $user->id;
  7. ?>


Metoda select sama sobie powinna zbudować warunek na podstawie $this->name i $this->surname i załadować resztę danych do właściwości. Oczywiście zakładając, że obiekt Uzytkownicy reprezentuje jeden wiersz z tabeli. Jednak jeżeli jest (wyników) więcej to powinniśmy dostać kolekcję obiektów Uzytkownicy (Uzytkownik). Zresztą to już jest DAO, a Ty chciałeś napisać klasę bazy danych. Więc do metody select(); przekazuj po prostu SQL.

Podsumowując, Twój kod jest raczej do wyrzucenia winksmiley.jpg

Pozdrawiam!
Mize
Uzytkownik dziedziczy po bazie danych ? tongue.gif
Jeśli chcesz mieć dostęp do bazy danych to zainteresuj się czym jest context lub registry.
Hmm, nie widze tu sensu stosowania statycznych metod.

ayeo, polaczenie nie musi powstawać w konstruktorze, to już raczej dowolność zależna od programisty.
marekc12
Ok:) Dzięki za odpowiedzi:> Dokształce się jeszcze smile.gif)
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.