Привет, ребята, я довольно новичок в 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; }
}
При реализации «Factory» обычно это так, что другие классы, методы и т. Д., Использующие его, не должны знать или заботиться о соединениях, именах пользователей, паролях и т. Д.
Я бы сделал это нечто более похожее:
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 (), любым способом, который вам нужен.
Я не проверял, компилируется ли приведенный выше код, может быть несколько опечаток / проблем, но вы получите эту идею. Теперь вам нужно сделать еще один шаг и реализовать что-то вроде шаблона репозитория 🙂
Мое предложение состоит в том, что вы реализуете singleton, чтобы ограничить создание 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 для доступа к базе данных
Надеюсь это поможет.