Какие-либо предложения для улучшения моего класса соединения PDO?

Эй парни, я довольно плохо знаком с 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;
    }

}

6
задан Scarface 9 June 2010 в 22:14
поделиться

3 ответа

При реализации «Фабрики» обычно это делается для того, чтобы другие классы, методы и т. Д., Использующие ее, не должны знать или заботиться о соединениях, именах пользователей, паролях и т. Д.

Я бы сделал что-то вроде :

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 (), любым нужным вам способом.

Я не проверял, компилируется ли приведенный выше код, может быть несколько опечаток / проблем, но вы поняли. Теперь вам нужно сделать еще один шаг и реализовать что-то вроде шаблона репозитория :)

2
ответ дан 17 December 2019 в 02:24
поделиться

Я предлагаю реализовать синглтон, чтобы ограничить создание экземпляра 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();
2
ответ дан 17 December 2019 в 02:24
поделиться

Эта статья может оказаться полезной, она написана Эриком Вурцером и размещена на Nettuts, одном из моих других любимых веб-сайтов (помимо этого).
Почему вам следует использовать PDO PHP для доступа к базе данных

Надеюсь, это поможет.

2
ответ дан 17 December 2019 в 02:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: