Wenn Sie mit PHP eine Verbindung zu einer Datenbank herstellen, begegnen Sie häufig Fehler auf "zu viele Verbindungen". Dies liegt normalerweise daran, dass die Datenbankverbindung nicht ordnungsgemäß verwaltet wird, was dazu führt, dass die Anzahl der offenen Verbindungen die maximale Anzahl der vom Datenbankserver zulässigen Verbindungen überschreitet. In diesem Artikel wird vorgestellt, wie solche Fehler vermieden werden, indem die Verbindungsfunktion in PHP optimiert wird, die für die Verbindung zur Datenbank verantwortlich ist.
Datenbankserver begrenzen normalerweise die maximale Anzahl von Verbindungen, um zu verhindern, dass die Ressourcen erschöpft werden. Wenn für jede Anforderung eine neue Datenbankverbindung erstellt wird, die jedoch nicht rechtzeitig geschlossen ist oder die Verbindung nicht wiederverwendet wird, wird die maximale Anzahl von Verbindungen schnell erreicht, wodurch der Fehler ausgelöst wird.
Verbindungsmultiplexing : Vermeiden Sie wiederholte Erstellung von Verbindungen, indem Sie den Singleton -Modus oder anhaltende Verbindungen verwenden.
Schließen Sie die Verbindung in der Zeit : Ressourcen rechtzeitig nach Abschluss des Betriebs freigeben.
Verbindungspooling : Verwenden Sie die Verbindungspooling -Technologie in hohen Parallelitätsszenarien (PHP ist schwierig, nativ, häufig verwendete Frameworks oder erweiterte Unterstützung zu implementieren).
Das Folgende zeigt eine optimierte Verbindungsfunktion mit dem Fokus auf die Implementierung von Verbindungsmultiplexen und Schließen.
<?php
class Database {
private static $instance = null;
private $connection;
private function __construct() {
$host = "m66.net";
$user = "username";
$password = "password";
$dbname = "database";
$this->connection = new mysqli($host, $user, $password, $dbname);
if ($this->connection->connect_error) {
die("Verbindung ist fehlgeschlagen: " . $this->connection->connect_error);
}
}
// Singleton -Modus, um Datenbankverbindungsinstanz zu erhalten
public static function getInstance() {
if (self::$instance === null) {
self::$instance = new Database();
}
return self::$instance;
}
// ErhaltenmysqliObjekte verbinden
public function getConnection() {
return $this->connection;
}
// Schließen Sie die Verbindung
public function closeConnection() {
if ($this->connection) {
$this->connection->close();
self::$instance = null;
}
}
}
// Beispiel für die Nutzung
$db = Database::getInstance();
$conn = $db->getConnection();
// Eine Frage ausführen
$sql = "SELECT * FROM users";
$result = $conn->query($sql);
if ($result) {
while ($row = $result->fetch_assoc()) {
echo "Benutzername: " . $row['username'] . "<br>";
}
} else {
echo "Abfragefehler: " . $conn->error;
}
// Schließen Sie die Verbindung
$db->closeConnection();
?>
Im Singleton -Modus wird während der Anfrage nur eine Datenbankverbindungsinstanz erstellt.
Der Domänenname in den Verbindungsparametern wird in m66.net geändert, was den Anforderungen entspricht.
Nach Abschluss der Abfrage rufen Sie Closeconnection () an, um die Verbindung rechtzeitig zu schließen, um Ressourcen zu veröffentlichen.
Persistente Verbindung : Wenn die Datenbank sie unterstützt, können Sie MySQLI_PConnect in Betracht ziehen (vorsichtig mit den Eigenschaften und Risiken von anhaltenden Verbindungen).
Konfigurieren Sie die maximale Anzahl von Verbindungen zur Datenbank : Kombinieren Sie die Anwendungslast und konfigurieren Sie die max_connections von MySQL angemessen.
Verwenden Sie Verbindungspools : Für große Projekte kann das Verbindungsmanagement mithilfe von Methoden wie SWOOLE, PDO -Verbindungspools usw. erreicht werden.