Lorsque vous vous connectez à une base de données à l'aide de PHP, vous rencontrez souvent des erreurs "trop de connexions". Cela est généralement dû au fait que la connexion de la base de données n'est pas correctement gérée, ce qui entraîne le nombre de connexions ouvertes dépassant le nombre maximum de connexions autorisées par le serveur de base de données. Cet article présentera comment éviter de telles erreurs en optimisant la fonction de connexion dans PHP qui est responsable de la connexion à la base de données.
Les serveurs de base de données limitent généralement le nombre maximum de connexions pour empêcher les ressources d'être épuisées. Si une nouvelle connexion de base de données est créée pour chaque demande, mais qu'elle n'est pas fermée dans le temps ou si la connexion n'est pas réutilisée, le nombre maximum de connexions sera rapidement atteint, déclenchant l'erreur.
Multiplexage des connexions : Évitez la création répétée de connexions, en utilisant le mode singleton ou des connexions persistantes.
Fermez la connexion à temps : relâchez les ressources à temps après avoir terminé l'opération.
Poolage de connexion : utilisez la technologie de regroupement de connexions dans des scénarios de concurrence élevés (PHP est difficile à mettre en œuvre des cadres nativement et couramment utilisés ou un support prolongé).
Ce qui suit démontre une fonction de connexion optimisée à l'accent mis sur la mise en œuvre du multiplexage et de la fermeture des connexions.
<?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("Échec de la connexion: " . $this->connection->connect_error);
}
}
// Mode singleton pour obtenir l'instance de connexion de la base de données
public static function getInstance() {
if (self::$instance === null) {
self::$instance = new Database();
}
return self::$instance;
}
// ObtenirmysqliConnecter les objets
public function getConnection() {
return $this->connection;
}
// Fermer la connexion
public function closeConnection() {
if ($this->connection) {
$this->connection->close();
self::$instance = null;
}
}
}
// Exemple d'utilisation
$db = Database::getInstance();
$conn = $db->getConnection();
// Exécuter une requête
$sql = "SELECT * FROM users";
$result = $conn->query($sql);
if ($result) {
while ($row = $result->fetch_assoc()) {
echo "nom d'utilisateur: " . $row['username'] . "<br>";
}
} else {
echo "Erreur de requête: " . $conn->error;
}
// Fermer la connexion
$db->closeConnection();
?>
Grâce au mode Singleton, une seule instance de connexion de la base de données est créée tout au long de la demande.
Le nom de domaine des paramètres de connexion est modifié en m66.net , qui répond aux exigences.
Une fois la requête terminée, appelez CloseConnection () pour fermer la connexion à temps pour libérer les ressources.
Connexion persistante : si la base de données le prend en charge, vous pouvez considérer MySQLI_PConnect (faites attention aux caractéristiques et aux risques des connexions persistantes).
Configurez le nombre maximum de connexions à la base de données : combinez la charge de l'application et configurez raisonnablement MySQL Max_Connections .
Utiliser des pools de connexion : pour les grands projets, la gestion des connexions peut être réalisée en utilisant des méthodes telles que Swoole, PDO Connection Pools, etc.