Я играл с PDO в течение последних нескольких дней, я работаю над небольшой системой CMS, чтобы научить себя навыкам ООП, но, хотя это всего лишь небольшая CMS, я хочу, чтобы она могла справиться с любым сеть может бросить на это.
Это то, что я до сих пор придумал, я собираюсь добавить пул соединений в конструктор, чтобы обеспечить большое количество одновременных соединений по требованию. Я очень новичок в этом ООП, поэтому я хочу немного советов и критики, без сомнения, я сделал здесь что-то ужасно неправильное.
Я взял верхний ответ на Global или Singleton для соединения с базой данных? в качестве базового проекта, хотя я добавил частный конструктор, поскольку хочу использовать $ this-> dbConnectionInstance во всем классе для многочисленных вспомогательные функции для использования.
Большое спасибо за ваше время, я действительно буду признателен за любые советы, которые вы можете дать мне,
-Drew
// Usage Example: $dbconn = dbManager::getConnection();
// $dbconn->query("SELECT * FROM accounts WHERE id=:id", "':id' => $id");
<?php
class dbManager {
private static $dbManagerInstance;
private $dbConnectionInstance;
private $stime;
private $etime;
public $timespent;
public $numqueries;
public $queries = array();
public static function getManager(){
if (!self::$dbManagerInstance){
self::$dbManagerInstance = new dbManager();
}
return self::$dbManagerInstance;
}
// Server details stored in definition file
private function __construct($db_server=DB_SERVER, $db_user=DB_USER, $db_pass=DB_PASS, $db_params=array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")) {
if(!$this->dbConnectionInstance)
{
try{
$this->dbConnectionInstance = new PDO($db_server, $db_user, $db_pass, $db_params);
$this->dbConnectionInstance->setAttribute(PDO::ATTR_PERSISTENT, PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
$this->dbConnectionInstance = null;
die($e->getMessage());
}
}
return $this->dbConnectionInstance;
}
private function __destruct(){
$this->dbConnectionInstance = null;
}
private function query($sql, $params = array()) {
$this->queries[] = $sql;
$this->numqueries++;
$this->sTime = microtime();
$stmt = $this->dbConnectionInstance->prepare($sql);
$stmt->execute($params);
$this->eTime = microtime();
$this->timespent += round($this->eTime - $this->sTime, 4);
return $stmt;
}
}
?>
Спасибо вам обоим за ваши предложения, я теперь добавил откат и зафиксировал в моей обработке исключений, я просто исследую использование буферизованных запросов, я не совсем уверен, что это мне даст?