Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MYSQL] Klasa obsługująca bazę z PDO
Matado
post 9.04.2009, 22:10:05
Post #1





Grupa: Zarejestrowani
Postów: 67
Pomógł: 0
Dołączył: 9.12.2008

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


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. ?>
Go to the top of the page
+Quote Post
RafaelX
post 9.04.2009, 22:15:48
Post #2





Grupa: Zarejestrowani
Postów: 144
Pomógł: 28
Dołączył: 2.01.2009

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


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
Go to the top of the page
+Quote Post
Matado
post 9.04.2009, 22:36:02
Post #3





Grupa: Zarejestrowani
Postów: 67
Pomógł: 0
Dołączył: 9.12.2008

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


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. ?>
Go to the top of the page
+Quote Post
kantek
post 9.04.2009, 23:50:08
Post #4





Grupa: Zarejestrowani
Postów: 73
Pomógł: 15
Dołączył: 2.04.2009
Skąd: koszalin

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


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


--------------------
kantek.com.pl
Go to the top of the page
+Quote Post
RafaelX
post 10.04.2009, 09:02:29
Post #5





Grupa: Zarejestrowani
Postów: 144
Pomógł: 28
Dołączył: 2.01.2009

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


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