什么是数据库连接的更好实践

时间:2014-12-18 02:33:54

标签: php oop

我想知道使用PHPOO进行数据库连接的更好方法是什么。

如果我在 __ construct 上设置连接并关闭 __ destruct 上的连接,我是否会进行太多无用的连接?

例如..我的类名为" sqlClass"它有一些方法..

所以..让我们实例化这个班级......

$myObj = new sqlClass(); // mysql_connect and mysql_close executed here...

$myObj->insertData(); // mysql_connect and mysql_close executed here again...

我应该将连接分开吗?

2 个答案:

答案 0 :(得分:1)

1次连接

class sqlClass {
    private $_connection = null;
    public function __construct() {
        $this->_connection = new SomeConnection(array('param1', 'param2', 'param3'));
        }
    public function query($query) {
        return $this->_connection->query();
        }
    }

2增加更多自由

class sqlClass {
    private $_connection = null;
    public function __construct($params) {
        $this->_connection = new SomeConnection($params);
        }
    public function query($query) {
        return $this->_connection->query();
        }
    }

3.1要么添加懒惰

class sqlClass {
    private $_connection = null;
    private $_params = null;
    public function __construct($params) {
        $this->_params = $params
        }
    public function query($query) {
        if ($this->_connection === null)
            $this->_connection = new SomeConnection($this->_params);
        return $this->_connection->query($query);
        }
    }

3.2要么添加依赖注入

class sqlClass {
    private $_connection = null;
    public function __construct(SomeConnection $connection) {
        $this->_connection = $connection;
        }
    public function query($query) {
        return $this->_connection->query($query);
        }
    }

4将延迟移至连接类并使用依赖注入

class LazyConnection extends SomeConnection{
    private $_params = null;
    private $_inited = false;
    public function __construct($params){
        $this->_params = $params;
        }

    public function query($query){
        if (!$this->_inited){
            parent::__construct($this->_params);
            $this->_inited = true;
            }
        parent::query($query);
        }
    }

使用OOP,您无需手动关闭连接:http://php.net/manual/en/features.gc.php

答案 1 :(得分:0)

您应该尽可能晚地打开连接并尽快关闭它。 如果您的驱动程序正在使用连接池,它将重新使用该连接。 如果您的代码由于某种原因而失败,或者从未到达您要插入数据的部分,则不会留下泄漏的连接。

根据经验,打开它们很晚,提前关闭它们并让司机完成其余的工作