我的数据库有问题;过去半年来,我一直在运营一个网站,从现在开始它一直运行良好,因为它在访问该网站时输出错误:
数据库无法连接:PDOException:SQLSTATE [08004] [1040]太 dbconfig.php中有许多连接:14
我已经研究了很长时间,但是找不到导致此问题的原因的单一解决方案,因为半年后它突然出现是很奇怪的。
我的连接代码如下:
class Database {
private $host = "localhost";
private $db_name = "[...]";
private $username = "[...]";
private $password = "[...]";
public $conn;
public function dbConnection() {
$this->conn = null;
try {
$this->conn = new PDO("mysql:host=" . $this->host . ";dbname=" . $this->db_name, $this->username, $this->password);
$this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $exception) {
exit('Database failed to connect: ' . $exception);
}
return $this->conn;
}
}
问题可能是什么?我也在其他网站上也使用了此代码,所以我希望这些网站不会很快出现相同的错误。
答案 0 :(得分:1)
您似乎在破坏这段代码中不必要的连接。如果已经建立连接,则应该重新使用该连接。同样,如果您有任何打开的语句或结果,这实际上不会关闭连接,但会打开另一个连接。这可能是您的问题。同样,这实际上取决于您在实际脚本中如何使用此类。在同一脚本中重复调用此命令可能会导致您的问题。
因此,如果已经建立连接,则不要重用它。如果仅出于实际原因而与数据库建立连接,则该过程相对较慢。这通常称为Singleton模式。
class Database {
private $host = "localhost";
private $db_name = "[...]";
private $username = "[...]";
private $password = "[...]";
public $conn = null;
public function dbConnection() {
if ( $this->conn !== null ) {
// already have an open connection so lets reuse it
return $this->conn;
}
try {
$this->conn = new PDO("mysql:host=" . $this->host . ";dbname=" . $this->db_name, $this->username, $this->password);
$this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $exception) {
exit('Database failed to connect: ' . $exception);
}
return $this->conn;
}
}