Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Wzorzec projektowy Singleton
Forum PHP.pl > Forum > Przedszkole
Marys91
Witam,
czytam książkę i na podstawie tej książki stworzyłem sobie klasę obsługującą bazę. Tylko pojawia się pewien problem, a mianowicie do tej klasy jest załączany taki plik jak DB.php i później z tego pliku są używane metody. Pytanie moje brzmi czy to DB.php trzeba samemu napisać czy już jest gdzieś gotowe? Autorzy książki wykorzystują PostgreSQL, a ja chce wykorzystać MySQL. Znalazłem taki link http://pear.php.net/manual/pl/package.data....db.iserror.php i tu są opisane te metody z których korzystam.

Może zaprezentuje kawałek kodu:
  1. <?php
  2.  
  3. require_once('config.php');
  4. require_once('DB.php');
  5.  
  6. Class Datebase{
  7. private $conn;
  8.  
  9. private function __construct($dsn=null){
  10. global $conn;
  11.  
  12. if($dsn == null){
  13. $dsn = $cfg['db']['dsn'];
  14. }
  15.  
  16. $this->conn = DB::connect($dsn);
  17.  
  18. if(DB::isError($this->conn)){
  19. throw new Exception($this->conn->getMessage(), $this->conn->getCode());
  20. }
  21.  
  22. $this->conn->setFetchMode(DB_FETCHMODE_ASSOC);
  23. }
  24.  
  25. static public function instance(){
  26. static $objDB;
  27.  
  28. if(! isset($objDB)){
  29. $objDB = new Datebase();
  30. }
  31.  
  32. return $objDB;
  33. }
  34.  
  35. function __destruct(){
  36. $this->conn->disconnect();
  37. }
  38.  
  39. //Zwraca obiekt DB_result
  40. function select($sql){
  41. $result = $this->conn->query($sql);
  42.  
  43. if(DB::isError($result)){
  44. throw new Exception($result->getMessage(), $result->getCode());
  45. }
  46.  
  47. return $result;
  48. }
  49.  
  50. //Zwraca dwuwymiarową tablicę asocjacyjną
  51. function getAll($sql){
  52. $result = $this->conn->getAll($sql);
  53.  
  54. if(DB::isError($result)){
  55. throw new Exception($result->getMessage(), $result->getCode());
  56. }
  57.  
  58. return $result;
  59. }
  60.  
  61. ...


i teraz jest np. DB::connect, DB::isError, skąd się bierze $this->conn->query($sql)? Zbytnio tego nie rozumiem. Przykładowo, gdzie jest napisana metoda getMessage()? Proszę o jakieś wyjaśnienie bo widzę, że to jest ciekawe rozwiązanie i odciąża serwer.
olechafm
no skoro jest require dla pliku DB.php to zdecydowanie brakuje Ci tego pliku i to w nim zadeklarowane są wspomniane funkcje...

jednak nie podajesz nazwy książki, oraz tego, czy przypadkiem podany przykład nie jest pisany bazując na jakimś frameworku, który mógłby dostarczać klasę DB, takie informację byłyby przydatne...

poza tym temat posta dobrany dosyć niefortunnie...


Edit:
a skoro znalazłeś już informacje o pakiecie PEAR i API dostępu do baz danych to poczytaj o nim, a szczególnie o tym gdzie znajdziesz klasy przezeń dostarczane, nie wiem na jakim środowisku to testujesz, ale zajrzyj do katalogu PHP/PEAR tam chyba nawet jest ten Twój brakujący plik...
kaem
Sciągnij pakiet DB z Pear i masz:
  1. $this->conn = DB::connect($dsn);
czyli $conn jest jakimś obiektem zwracanym przez funkcje connect pakietuDB::connect(nie używam nie wiem jak to dokładnie działa). A co za tym idzie, ma wszystkie jej metody i właściwości czyli też getMessage(), która prawdopodobnie zwraca komunikaty błędów;
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.