Php 每次我需要一些东西时创建新的mysql连接对象

Php 每次我需要一些东西时创建新的mysql连接对象,php,mysql,oop,Php,Mysql,Oop,我是PHP新手,我正在尝试做这个简单的任务:从MySql数据库获取数据 我创建了一个与数据库通信的单例类: class Database { private static $db = null; private $servername; private $username; private $password; private $connection; private function Database(){ $this->

我是PHP新手,我正在尝试做这个简单的任务:从MySql数据库获取数据

我创建了一个与数据库通信的单例类:

class Database {
    private static $db = null;
    private $servername;
    private $username;
    private $password;
    private $connection;

    private function Database(){
        $this->servername = "localhost"; 
        $this->username = "user";
        $this->password = "123456";
    }

    public static function get_database(){
        if(!static::$db){
            static::$db = new Database();
        }
        return static::$db;
    }

    function start_connection(){
        $this->connection = new mysqli($this->servername, 
                                       $this->username, 
                                       $this->password);
    }

    function execute_query($query){
        $this->start_connection();

        [...]

        $this->disconnect();
    }

    function disconnect(){
        $this->connection->close();
    }

    [...]
}

这段代码运行得很好,但有一件事让我很困扰。我想知道我是否真的需要在每次调用start\u connection时创建一个新的连接对象new mysqli。有类似于重新连接的功能吗?

如果愿意,可以调用$this->start\u connection,将mysqli实例存储在数据库类中,并在私有函数数据库函数中声明


如果需要,还可以提供一个静态函数来关闭连接。

这完全取决于您。大多数人只需在构造函数中连接到db一次,然后对所有事情重复使用该连接。但一般来说,如果您需要使用不同的凭据访问数据库,那么您只需要多次连接到数据库。您听说过单例模式吗?可能您可以在数据库类中使用类似的东西。@Mindastic-这几乎是一个使用get_数据库代替标准getInstance的单例模式-如OP在问题中所述。。。虽然我认为单例模式不一定是数据库处理程序会话处理程序的正确选择,但可以,因为您可能希望在同一脚本中连接到不同的数据库服务器,例如www server db和newsletter/mailserver db,以管理来自我的帐户类型的新闻稿订阅page@CD001你完全正确。我不知道为什么我在最初阅读问题时错过了“get_数据库”。请驳回我之前的评论。谢谢你指出。我从来没有真正尝试过,因为我倾向于让db连接在脚本结束时自行终止,但理论上你可以在_构造函数中连接到数据库,在_析构函数中断开与数据库的连接;这样,当您的对象被终止时,它应该终止连接并释放资源指针。