PDO i OOP konekcija sa bazom?

PDO i OOP konekcija sa bazom?

offline
  • WoosTy 
  • Novi MyCity građanin
  • Pridružio: 29 Nov 2011
  • Poruke: 9

Imam par pitanja...
Kada radim sa OOP jel bolje da PDO konekcija ima svoju klasu ili da bude napolju pa da je onda ubacim gde je potrebna? Gledao sam na netu i vecina ljudi koristi ovako nesto:

<?php defined("DB_HOST") ? NULL : define("DB_HOST", "localhost"); defined("DB_USER") ? NULL : define("DB_USER", "root"); defined("DB_PASS") ? NULL : define("DB_PASS", ""); defined("DB_NAME") ? NULL : define("DB_NAME", "website"); class DBConnection{        private static $conn;        public function __construct(){       try{          self::$conn = new PDO("mysql:host=". DB_HOST .";dbname=". DB_NAME, DB_USER, DB_PASS);          self::$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);          echo "Connection<br>";       } catch(PDOException $ex){          die($ex->getMessage());       }    }        public static function connected(){       if(!isset(self::$conn)){          self::$conn = new DBConnection();       }    }     } $db = DBConnection::connected(); $query = $db->query("SELECT * FROM users"); ?>

Problem je tu sto ne postoji "query" metoda, tj ne ucitava PDO query nego trazi tu metodu unutar ove klase...
Citat:( ! ) Fatal error: Call to a member function query() on a non-object in C:\wamp\www\testDB\config.php on line 31



Takodje kada ubacim isto ovako u neku drugu klasu opet mi govori da ne postoji query() metoda. Da li je uospte dobro koristiti singleton pattern za konekciju sa bazom?
Da je bolje ovako raditi ili ubaciti konekciju kroz "class users extends DBConnection{ ... }"

Kako vi ovo radite?

Hvala unapred Smile



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 17 Jun 2012
  • Poruke: 727

Imas ovdje objasnjenja, listaj malo ovaj link pa ces naici na sve i svasta. Sretno!
http://coursesweb.net/php-mysql/pdo-introduction-connection-database



offline
  • Pridružio: 10 Avg 2006
  • Poruke: 1009
  • Gde živiš: Beograd

Prvo, izbacio bih bilo kakvo korišćenje konstanti onih gore.

Ti parametri su idealni kandidati da uđu u "__construct" metod. Drugo, ne bih koristio singleton. Izbegavaj ga generalno. U jednom trenutku ti mogu zatrebati dve konekcije npr.

Recimo, možeš da koristiš "decorator" pattern:

class Connection {     /**     * \PDO     */     private $connection;    /**     * @param string $server     * @param string $dbName     * @param string $username     * @param string $password     */    public function __construct($server, $dbName, $username, $password)    {        $this->pdo = new \PDO("mysql:host=". $server .";dbname=". $dbName, $username, $password);    }        /**     * @param string $query     *     * @return \PDOStatement     */    public function query($statement)    {       return $this->pdo->query($statement);    } }

Mada ovo zaista nije neophodno ukoliko nemaš specifične zahteve pa želiš da prilagodiš ponašanje PDO-a svom projektu. Možeš razmisliti i o jednostavno extendovanju samog \PDO-a

class MyDB extends \PDO {     // Overrajduj ovde šta i kako želiš }

Treće, i, mislim najpametnije ti je da ne izmišljaš toplu vodu već da koristiš nešto već postojeće, konkretno bih ti preporučio da pogledaš Doctrine DBAL: http://www.doctrine-project.org/projects/dbal.html

offline
  • WoosTy 
  • Novi MyCity građanin
  • Pridružio: 29 Nov 2011
  • Poruke: 9

Hvala na pomoci.
Moze lock.

offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3747
  • Gde živiš: 127.0.0.1

Ono sto ja generalno preporucujem je koriscenje ili pravljenje sopstvene klase za manipulaciju nad bazom. Zasto? U jednom trenutno - pozeleces da promenis tip baze, ili ce nesto zastareti... I u tom slucaju menjas jednu klasu - umesto svih u kojima se kacis na bazu.

Mada - ORM je mnogo mnogo bolja varijanta, ali to nije tema ovde.

Ko je trenutno na forumu
 

Ukupno su 813 korisnika na forumu :: 4 registrovanih, 1 sakriven i 808 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: DragoslavS, Nobunaga, sokojet, 125