Изнасяне на PDO в клас

mitko80001

Registered
Здравейте, вчера си надрасках една бърза PDO връзка към mysql-a на сървъра обаче ме успях да го извадя във отделен клас за да не викам всеки път, следният код :
Код:
$dsn = "mysql:host=host;dbname=attack";
$pdo = new PDO($dsn, "bla", "bla");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

иска ми се да си направя един config.php файл, където да имам клас DBConnection и от там да извиквам следното:
$db = new DBConnection();
$ps=$db->prepare(""); , вместо във всяка функция да викам горната връзка към pdo.
Някакви идеи ?
 
Пробвай така
Код:
class DbConnection extends PDO {
         public function __construct($connString, $username, $password) {
                  parent::__construct($connString, $username, $password);
                  $this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
         }
}
 
Възможно е и така:

Включил съм и Singleton шаблона (тоест имаш само една инстанция към връзката с базата данни).

PHP:
<?php
class DB {


private static $Instance = null;


private function __construct(){}

public static function Connect() {
        if(self::$Instance == null) {
            self::$Instance = new PDO("mysql:host=localhost;dbname=dbname", "name", "password", array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); 
                    
         }
          
        return self::$Instance;
    }
private function __clone() {}

}

$db = DB::Connect();

$Result = $db->query("SELECT * FROM `users`");

while($row = $Result->fetch(PDO::FETCH_ASSOC)) {
    echo $row['user_name']."<br />";
}



?>
 
Аз съм малко против php framework/шаблони и така нататък, но това ще го ползвам харесва ми, ще пиша до 5-10 мин дали е станало :)

Стана,а да попитам как мога да го dispose - вам след като дадена заявка е свършила, има ли начин да се разбере, или този single ton ми дава само една инстанция към дб и след като е извършена е сетва пак на null ? - иначе взимаш точката :),
или направо да си направя private static $databse = null; там да запиша connect-та и като свърша просто да го дам в деструктора на null ?
 
Имаш само една инстанция на връзката с базата данни, може да е използваш и в други класове, на всякъде(един път правиш инстанция и после само си е прехвърляш в другите класове, чрез примерно конструктора или други методи, по този начин виж:{1} ). Това един вид прави копие на самата връзка и е ползваш за много заявки, вместо постояно да викаш нова връзка, ти ползваш старата(вече направената), не е сетва на null, до момента в който ако ти решиш не е сетнеш. А и след изпълнението на всички заявки вече може да си прекратиш връзката(коятко ще е само една за всички извършени заявки) ако желаеш.


{1}:
По този начин:

PHP:
$db = DB::Connect();
$Users = new User($db); 

//Така вече ползваш връзката и в този клас и няма да имаш нужда в този клас да правиш нова връзка, ами ще ползваш старата връзка (това е прехвърляне през конструктора)
 

Back
Горе