避免与db类的多个mysqli连接

时间:2017-01-01 21:30:41

标签: php oop mysqli

我刚刚开始oop,现在,甚至非常简单的事情让我感到困惑!  这是我的mysqli连接类:

SetWindowPos

让我们说我会这样用:

class DB{
    private $con;
    public function __construct(){
        $this->con=new mysqli('localhost','root','','dbName');
        if(!$this->con){
            echo '<b>There was a problem connecting to database! </b><br />errno: '.$con->connect_errno;
            exit;
        }
        $this->con->set_charset("utf8");
    }
    public function query($query){
        return $this->con->query($query);
    }
}

我刚刚从类DB中创建了2个对象。 这是否意味着每个对象都有一个新的mysql连接?如果是的话,我该如何避免呢?

我知道我可以在__destruct()函数中使用mysqli_close()但我在某处读取(可能在这个网站:) :)创建和销毁几个mysql连接并不好。

我该怎么办? ps:旁边,正如我所说的我在oop(以及mysqli)中的新内容所以如果对我的课程有任何评论(例如我在正确的地方设置了字符集吗?)我将会这样做很荣幸。

1 个答案:

答案 0 :(得分:1)

创建类的实例时,如果它正常工作,则无需重新创建它。

示例1

在你的问题中你做到了这一点:

$DB = new DB();
$test=$DB->query($query);

$DB2 = new DB();
$test2=$DB2->query($query2);

您可以这样做:

$DB = new DB();
$test = $DB->query($query);
$test2 = $DB->query($query2);

示例2

有时你有一个实例,你想在任何地方使用它。您可以在代码开头或第一次请求时创建它。然后你可以在任何地方使用它。

$DB = new DB();

function something(){

    global $DB;

    $test = $DB->query($query);
}

如果你的课程很简单,就像你在这里提到的那样,就像第一个例子一样使用它。此方法适用于需要从任何位置访问的实例。一个函数改变了它,另一个函数改变了它。

此方法也被认为是不好的做法,因为它会使您的代码更难以阅读和调试。

一些有用的链接: