gpt4 book ai didi

php 具有相同数据库类的两个对象。 destruct 无法关闭第二个对象上的数据库连接

转载 作者:行者123 更新时间:2023-11-30 01:31:37 24 4
gpt4 key购买 nike

很抱歉,如果这个问题的标题没有解释实际的问题。我找不到合适的词来命名这个问题的标题。

我有一个像这样的数据库类:

class Database
{
private $link;
private $host, $username, $password, $database;

public function __construct($setup)
{
if ($setup == 'default') {
$this->host = 'localhost';
$this->username = 'root';
$this->password = 'root';
$this->database = 'infobox_sierraleone';
}

if ($setup == 'promo') {
$this->host = 'localhost';
$this->username = 'root';
$this->password = 'root';
$this->database = 'infobox';
}

$this->link = mysql_connect($this->host, $this->username, $this->password)
OR die("There was a problem connecting to the database.");

mysql_select_db($this->database, $this->link)
OR die("There was a problem selecting the database.");

}

public function __destruct()
{
mysql_close($this->link)
OR die("There was a problem disconnecting from the database.");
}

}

我在一个单独的文件中创建了上述类的不同对象:

include 'conn/database.php';

$db = new Database('default');
$db_promo = new Database('promo');

当我运行上面的脚本时,我收到以下消息:

There was a problem disconnecting from the database.

我意识到这条消息来自 __destruct() 函数。我已经研究了一段时间,但我仍然不清楚为什么会显示此消息以及如何摆脱它。

任何形式的帮助将不胜感激。

谢谢。

编辑:删除了构造函数中的 return 语句。

最佳答案

由于您没有销毁自己的对象,因此当脚本完成时它们会被 PHP 销毁。然后 PHP 就会销毁它所拥有的任何东西,但不一定以正确的顺序。

在这种情况下,显然 PHP 首先终止了 MySQL 连接,然后继续销毁其他对象,包括您的对象。然后,您的对象会尝试断开已经断开的数据库连接,如果您不让脚本在失败时死亡,这将不会被注意到。

关于php 具有相同数据库类的两个对象。 destruct 无法关闭第二个对象上的数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17385659/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com