在哪里创建和关闭数据库连接?

时间:2016-07-15 19:33:31

标签: php mysql sql mysqli

我知道我们总是必须在最后关闭数据库连接。我有一个类,有四种方法,每种方法都包含数据库查询。现在我的问题是

  

我应该创建一个连接并在每个不同的方法中关闭它   或者在类的构造函数中创建连接?如果我创造   在构造函数中的连接然后我将在哪里关闭它。因为   如果我在任何函数中关闭它,其他任何方法都无法访问它。

如果我为每个方法创建新连接,则没有任何连接可能非常高。那么 我将在哪里以正确的方式创建和关闭该功能?

4 个答案:

答案 0 :(得分:1)

如果你打开它,那么你需要关闭它。

只要您关闭连接,就可以将其关闭到所需位置。看起来你的结局可能更多的是关于程序程序的设计。仅仅因为数据库调用使用连接并不意味着它必须随之打开和关闭。

假设你可能想要重用一个持有连接的$ mysqli变量。您可以将该连接传递给函数,然后将其返回或关闭。通过这种方式,您可以在函数体中隔离数据库调用的主要活动,而无需过多担心所有内容的打开和关闭。

使用该技术,可以为多个查询重用连接,每个查询都包含在自己的方法中。也许你最好打开一个类并根据需要传递$ mysqli连接。

这取决于您的计划以及您对其运作方式的选择。

如果您正在开发一个程序,并且您对开始和结束操作的影响感到好奇,可以调用http://php.net/manual/en/mysqli.stat.php或类似的功能。如果您打开多个线程而不关闭它们,那么您会看到线程计数在mysqli_stat()的答案中升级。

例如,如果您的查询设计不合理,您的呼叫可能无法关闭;连接对象的范围应该自然地与脚本的结尾关闭。

答案 1 :(得分:0)

由于php的引用计数系统没有必要关闭连接,它将被自动释放(除非你打开持久的数据库链接),所以它不应该引起头痛。 / p>

您应该只在btw。

打开连接

答案 2 :(得分:0)

请考虑交易概念。比方说,您正在按序列调用方法,打开连接并保持打开是有意义的 如果其他方法的调用有延迟,我建议您不要暂停连接,特别是如果有多个人要访问该应用程序

答案 3 :(得分:0)

最好的方式是implement classesextendfunctional class包含methods。扩展类的Constructor可以call to connection函数,只要对象设置为NULL,析构函数就可以调用断开连接。

或者

正如您的问题所述,在基类中有两个具有构造和其他具有破坏的函数。 在使用连接之前调用构造函数,并在使用后将其销毁。 例如:

   class bar{
    protected function connect(){
    #connect to db
    }
    protected function disconnect(){
    #disconnect db
    }

    class foo extends bar{

    function func1 () {
    $this->connect();
    #Code
    $this->disconnect();
    }

    function func2() {
    $this->connect();
    #Code
    $this->disconnect();
    }

    function func3() {
    $this->connect();
    #Code
    $this->disconnect();
    }

    function func4() {
    $this->connect();
    #Code
    $this->disconnect();
    }
?>