我知道我们总是必须在最后关闭数据库连接。我有一个类,有四种方法,每种方法都包含数据库查询。现在我的问题是
我应该创建一个连接并在每个不同的方法中关闭它 或者在类的构造函数中创建连接?如果我创造 在构造函数中的连接然后我将在哪里关闭它。因为 如果我在任何函数中关闭它,其他任何方法都无法访问它。
如果我为每个方法创建新连接,则没有任何连接可能非常高。那么 我将在哪里以正确的方式创建和关闭该功能?
答案 0 :(得分:1)
如果你打开它,那么你需要关闭它。
只要您关闭连接,就可以将其关闭到所需位置。看起来你的结局可能更多的是关于程序程序的设计。仅仅因为数据库调用使用连接并不意味着它必须随之打开和关闭。
假设你可能想要重用一个持有连接的$ mysqli变量。您可以将该连接传递给函数,然后将其返回或关闭。通过这种方式,您可以在函数体中隔离数据库调用的主要活动,而无需过多担心所有内容的打开和关闭。
使用该技术,可以为多个查询重用连接,每个查询都包含在自己的方法中。也许你最好打开一个类并根据需要传递$ mysqli连接。
这取决于您的计划以及您对其运作方式的选择。
如果您正在开发一个程序,并且您对开始和结束操作的影响感到好奇,可以调用http://php.net/manual/en/mysqli.stat.php或类似的功能。如果您打开多个线程而不关闭它们,那么您会看到线程计数在mysqli_stat()的答案中升级。
例如,如果您的查询设计不合理,您的呼叫可能无法关闭;连接对象的范围应该自然地与脚本的结尾关闭。
答案 1 :(得分:0)
由于php的引用计数系统没有必要关闭连接,它将被自动释放(除非你打开持久的数据库链接),所以它不应该引起头痛。 / p>
您应该只在btw。
打开连接答案 2 :(得分:0)
请考虑交易概念。比方说,您正在按序列调用方法,打开连接并保持打开是有意义的 如果其他方法的调用有延迟,我建议您不要暂停连接,特别是如果有多个人要访问该应用程序
答案 3 :(得分:0)
最好的方式是implement classes
和extend
到functional 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();
}
?>