Эй парни, я довольно плохо знаком с pdo так я в основном просто, соединили простой класс соединения с помощью информации из вводной книги, которую я читал, но действительно ли это соединение эффективно? Если бы у кого-либо есть какие-либо информативные предложения, я был бы очень признателен за его.
class PDOConnectionFactory{
public $con = null;
// swich database?
public $dbType = "mysql";
// connection parameters
public $host = "localhost";
public $user = "user";
public $senha = "password";
public $db = "database";
public $persistent = false;
// new PDOConnectionFactory( true ) <--- persistent connection
// new PDOConnectionFactory() <--- no persistent connection
public function PDOConnectionFactory( $persistent=false ){
// it verifies the persistence of the connection
if( $persistent != false){ $this->persistent = true; }
}
public function getConnection(){
try{
$this->con = new PDO($this->dbType.":host=".$this->host.";dbname=".$this->db, $this->user, $this->senha,
array( PDO::ATTR_PERSISTENT => $this->persistent ) );
// carried through successfully, it returns connected
return $this->con;
// in case that an error occurs, it returns the error;
}catch ( PDOException $ex ){ echo "We are currently experiencing technical difficulties. ".$ex->getMessage(); }
}
// close connection
public function Close(){
if( $this->con != null )
$this->con = null;
}
}
При реализации «Фабрики» обычно это делается для того, чтобы другие классы, методы и т. Д., Использующие ее, не должны знать или заботиться о соединениях, именах пользователей, паролях и т. Д.
Я бы сделал что-то вроде :
static class PDOConnectionFactory {
// database
private $dbType = "mysql";
// connection parameters
private $host = "localhost";
private $user = "user";
private $senha = "password";
private $db = "database";
// new CreateNewConnection( true ) <--- persistent connection
// new CreateNewConnection() <--- no persistent connection
public function CreateNewConnection($persistent = false) {
try {
$con = new PDO($dbType . ":host=" . $host . ";dbname=" . $db, $user, $senha, array(PDO::ATTR_PERSISTENT => $persistent));
// carried through successfully, it returns connected
return $con;
}
catch (PDOException $ex) {
// in case that an error occurs, it returns the error;
echo "We are currently experiencing technical difficulties. We have a bunch of monkies working really hard to fix the problem. Check back soon: " . $ex->getMessage();
}
}
}
Затем вы используете соединение, возвращаемое CreateNewConnection (), любым нужным вам способом.
Я не проверял, компилируется ли приведенный выше код, может быть несколько опечаток / проблем, но вы поняли. Теперь вам нужно сделать еще один шаг и реализовать что-то вроде шаблона репозитория :)
Я предлагаю реализовать синглтон, чтобы ограничить создание экземпляра PDO одним единственным объектом. Это может выглядеть так:
class Database {
protected static $_instance;
protected $_connection;
protected $_dns = 'mysql:host=localhost;dbname=mydbname';
protected $_username = 'myusername';
protected $_password = 'mypassword';
/**
* Singleton pattern implementation makes "new" unavailable
*/
protected function __construct()
{
$this->_connection =
new PDO($this->_dns, $this->_username, $this->_password);
}
public function getConnection()
{
return $this->_connection;
}
public static function getInstance()
{
if (null === self::$_instance) {
self::$_instance = new self();
}
return self::$_instance;
}
/**
* Singleton pattern implementation makes "clone" unavailable
*/
protected function __clone()
{}
}
$dbc = Database::getInstance()->getConnection();
Эта статья может оказаться полезной, она написана Эриком Вурцером и размещена на Nettuts, одном из моих других любимых веб-сайтов (помимо этого).
Почему вам следует использовать PDO PHP для доступа к базе данных
Надеюсь, это поможет.