Bạn có thể khởi tạo kết nối của mình với cơ sở dữ liệu trong một lớp triển khai mô hình singleton. Kết nối sẽ được thực hiện một lần và lớp này sẽ có thể dễ dàng truy cập bởi tất cả các đối tượng / tập lệnh khác của bạn.
tôi sử dụng một lớp có tên là "Core" trong ví dụ sau;
class Core
{
public $dbh; // handle of the db connexion
private static $instance;
private function __construct()
{
// building data source name from config
$dsn = 'pgsql:host=' . Config::read('db.host') .
';dbname=' . Config::read('db.basename') .
';port=' . Config::read('db.port') .
';connect_timeout=15';
// getting DB user from config
$user = Config::read('db.user');
// getting DB password from config
$password = Config::read('db.password');
$this->dbh = new PDO($dsn, $user, $password);
}
public static function getInstance()
{
if (!isset(self::$instance))
{
$object = __CLASS__;
self::$instance = new $object;
}
return self::$instance;
}
// others global functions
}
lớp này nhận các tham số từ một lớp tĩnh được gọi là "Cấu hình" nơi bạn có thể lưu trữ cấu hình của mình:
<?php
class Config
{
static $confArray;
public static function read($name)
{
return self::$confArray[$name];
}
public static function write($name, $value)
{
self::$confArray[$name] = $value;
}
}
// db
Config::write('db.host', '127.0.0.1');
Config::write('db.port', '5432');
Config::write('db.basename', 'mydb');
Config::write('db.user', 'myuser');
Config::write('db.password', 'mypassword');
trong tất cả các tập lệnh / đối tượng của bạn, bạn chỉ cần lấy bản sao của Core và sau đó truy vấn DB
$sql = "select login, email from users where id = :id";
try {
$core = Core::getInstance();
$stmt = $core->dbh->prepare($sql);
$stmt->bindParam(':id', $this->id, PDO::PARAM_INT);
if ($stmt->execute()) {
$o = $stmt->fetch(PDO::FETCH_OBJ);
// blablabla....
Nếu bạn cần thêm thông tin về singleton, hãy xem tài liệu PHP http://php .net / manual / en / language.oop5.patterns.php