Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Klasa obsługująca bazę z PDO
Forum PHP.pl > Forum > Przedszkole
Matado
Zacząłem pisać swój system newsów w OOP, ale natrafiłem na mały problem. W systemie będą 3 klasy:
1. do obsługi newsów i komentarzy
2. do logowania/wylogowywania i obsługi użytkowników (zmiana hasła i inne pierdoły)
3. do banowania

Jak myślicie, czy jest sens tworzenia tu klasy do łączenia się z bazą danych i później korzystanie z niej w tych klasach, jeśli korzystam z PDO?
Przez taką klasę nie musiałbym pisać co chwilę $pdo= new PDO itd.
Czy najlepiej nie tworzyć takiej klasy i łączyć się z bazą danych w każdej klasie przez zwyczajne PDO, bo z niej zawsze korzystam.
  1. <?php
  2. $pdo= new PDO ('mysql:host=localhost;dbname=base', 'root', 'password');
  3. ?>
RafaelX
mozesz napisać klase dziedziczącą po PDO i w konstruktorze ustwaić dane taki przykład jest w manualu chyba
pdo" title="Zobacz w manualu PHP" target="_manual
Matado
Ok, napisałem taką klasę, tylko jak teraz ustawić to w konstruktorze żebym od razu mógł korzystać z zapytań np.:
  1. <?php
  2. $this-> db-> prepare();
  3. $this-> db-> bindValue();
  4. $this-> db-> execute();
  5. ?>


Klasa:
  1. <?php
  2.  
  3. class Database
  4. {
  5.    public $dsn= 'mysql:host=localhost;dbname=trial';
  6.    public $username= 'root';
  7.    public $password= '';
  8.    public $db;
  9.    
  10.    public function connect()
  11.    {
  12.        $pdo= new PDO ($this-> dsn, $this-> username, $this-> password);
  13.        $this-> db= $pdo;
  14.    }
  15. }
  16.  
  17. ?>


Tutaj przykładowa klasa, tutaj nie wiem właśnie jak ustawić w konstruktorze, żeby móc korzystać z klasy do obsługi db.
  1. <?php
  2.  
  3. class users
  4. {
  5.    public function __construct()
  6.    {
  7.        include_once ('db.php');
  8.        $this-> db= '';
  9.    }
  10. }
  11.  
  12. ?>
kantek
Proszę:

1) klasa wykorzystaj dziedziczenie
  1. <?php
  2. class Baza extends PDO
  3.    {
  4.        public function __construct($a, $b, $c)
  5.        {
  6.            parent::__construct($a, $b, $c);
  7.        }
  8.        public function doZapytanie($zapytanie)
  9.        {
  10.            return parent::query($zapytanie);
  11.        }
  12.        //itd w manualu lista funkcji
  13.  
  14.    }
  15. ?>


i ta druga klasa include daj poza klasa
  1. <?php
  2. //include_once ('db.php');
  3.    class users
  4.    {
  5.        public $db;
  6.  
  7.           public function __construct()
  8.           {
  9.                   $this->db = new Baza('mysql:host=localhost; dbname=miasto','root','xxx');
  10.        }
  11.       }
  12. ?>


oraz przyklady wykorzystania
  1. <?php
  2. //przyklad
  3.    $a = new Baza('mysql:host=localhost; dbname=miasto','root','xxx');
  4.    $zapytanie = 'SELECT * from wies';
  5.        foreach ($a->doZapytanie($zapytanie) as $row) {
  6.        echo $row['nazwa'].'<br />';
  7.        }
  8.  
  9.    //przyklad2
  10.    $b = new users();
  11.    $zapytanie = 'SELECT * from wies';
  12.    foreach ($b->db->doZapytanie($zapytanie) as $row) {
  13.        echo $row['nazwa'].'<br />';
  14.        }
  15. ?>


a jeśli upierasz się przy swoim stary rozwiązaniu to:
w konstruktorze tej ostatniej klasy wykorzystaj
Database::connect(); - z klasy Database publiczna funkcja connect tworząca instancję klasy pdo (new PDO ...)

czyli w users dajesz sobie
public $db;
a w konstruktorze
$this->db=Database::connect();
ale taka rzeźba nie wiem czy będzie dobrze działać smile.gif

Pozdrawiam
RafaelX
tutaj masz chyba to o co tobie chodzi
http://pl.php.net/manual/en/class.pdo.php
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.