Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wzorzec Singletona w MySQL z PEAR, Problem połączenia 3 rzeczy
Marys91
post
Post #1





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 29.12.2010

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


Witam,
chciałbym wykorzystać wzorzec Singletona do połączenia się z bazą danych (MySQL) i do tego dołożyłem sobie PEAR' a, ale coś mi nie idzie. To co mam to są takie pliki:

classa.Databases.php
  1. <?php
  2. require_once('pear/MDB2.php');
  3. require_once('config.php');
  4.  
  5.  
  6. class Datebase{
  7. private $conn;
  8.  
  9. private function __construct($zmienna=null){
  10. global $mysql_dsn;
  11.  
  12. if($zmienna==null){
  13. $zmienna = $mysql_dsn;
  14. }
  15.  
  16. $this->conn=MDB2::connect($zmienna);
  17. }
  18.  
  19. static public function instance(){
  20. static $objMDB2;
  21.  
  22. if (!isset($objMDB2)){
  23. $objMDB2 = new Datebase();
  24. }
  25.  
  26. return $objMDB2;
  27. }
  28.  
  29. function select($sql){
  30. $result = $this->conn->query($sql);
  31.  
  32. return $result;
  33. }
  34.  
  35. function fetchAll($sql){
  36. $result = $this->conn->fetchAll($sql);
  37.  
  38. return $result;
  39. }
  40.  
  41. }
  42. ?>


Wiem, że brakuje obsługi błędów.

test.php
  1. <?php
  2. require_once('class.Database.php');
  3.  
  4. $ble = Datebase::instance();
  5. $elb = $ble->fetchAll('SELECT * FROM moajtabela');
  6.  
  7. echo $elb;
  8. ?>


I teraz tak. Po pierwsze czy dobrze myślę o wzorze Singletona (dobrze jest napisana klasa)? Po drugie czemu mi wywala błąd(Fatal error: Call to undefined function: MDB2_Driver_mysqli::numCol(). in pear/MDB2.php on line 1950)? To wygląda na błąd PEAR, ale jak robię normalnie bez mojej klasy to jest dobrze. Po trzecie, widziałem gdzieś jak koleś właśnie tworzył takie metody jak u mnie (fetchAll), ale czy przed tym nie powinno występować query()?

Nie wiem co tu jeszcze może być źle
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
olechafm
post
Post #2





Grupa: Zarejestrowani
Postów: 125
Pomógł: 2
Dołączył: 8.10.2010
Skąd: Poniemieckie miasto przesiedleńców

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


no to factory() nie łączy się z bazą, ale zwraca instancję obiektu

Will instantiate a new MDB2_Driver_Common instance, but will not connect to the database until required. This will delay making the actual connection. This is called lazy connecting. Using this makes sense if it is possible that due to caching inside the application no connection will ever need to be established.

Go to the top of the page
+Quote Post

Posty w temacie


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: 4.10.2025 - 22:38