下面是一个使用数据库的简单php类。这个类问题出在启动mysql_close函数的__destruct方法中。如果我在代码中创建了两个非常接近的DB对象,就会导致错误。看起来mysql_close关闭了所有数据库连接,而不仅仅是他自己的($this->dbLink)。为什么会发生这种情况?
require_once("modules/required/OptionsReader/m_OptionsReader.php");
class DB{
private $dbLink;
public function __construct() {
$options = new OptionsReader();
$DBSettings = $options->getDBSettings();
$this->dbLink = mysql_connect($DBSettings->getAddress(),$DBSettings->getUserName(),$DBSettings->getPswd());
@mysql_select_db($DBSettings->getDBName()) or die( "Unable to select database");
mysql_query( "set names 'utf8'" );
}
public function __destruct() {
mysql_close($this->dbLink);
}
public function launchQuery($query){
return mysql_query($query);
}
}
?>附注:我知道这个问题的简单解决方案就是从__desctuctor close()函数中创建并手动启动它,但如果能理解发生了什么,那就太好了。谢谢
发布于 2010-08-13 08:46:19
@zneak是正确的。mysql_connect确实将连接汇集在一起。问题是,为什么要关闭连接?在我多年的PHP语言开发中,我可以用一只手数出我使用mysql_connect的次数,我几乎只使用mysql_pconnect
来自http://php.net/mysql_pconnect -
与MySQL服务器建立持久连接。
mysql_pconnect()的行为与mysql_connect()非常相似,但有两个主要区别。
首先,当连接时,该函数将首先尝试查找已经使用相同的主机、用户名和密码打开的(持久)链接。如果找到,将返回它的标识符,而不是打开新的连接。
其次,当脚本执行结束时,与SQL服务器的连接不会关闭。相反,链接将保持打开状态以供将来使用(mysql_close()不会关闭由mysql_pconnect()建立的链接)。
https://stackoverflow.com/questions/3472972
复制相似问题