mysqli::query() : l'objet mysqli est déjà fermé / Impossible de récupérer l'erreur mysqli
En PHP, un message d'erreur indiquant "Impossible de récupérer mysqli" se produit généralement lorsque vous essayez d'accéder à une connexion à une base de données fermée. Cela se produit généralement dans les scripts de programmation orientée objet (POO) où la connexion mysqli est fermée prématurément.
Scénario d'erreur
Le code fourni dans class_EventCalendar.php renvoie l'erreur en raison des problèmes suivants :
-
Destructeur Comportement : La méthode __destruct() ferme l'objet $DBConnect lorsque l'instance EventCalendar est détruite. Cela signifie que toutes les requêtes ultérieures tentées après la destruction échoueront.
-
Exécution de requête : Dans la méthode addEvent(), l'objet $DBConnect est utilisé pour exécuter la requête SQL. Cependant, depuis que le destructeur a fermé la connexion, l'objet $DBConnect n'est plus utilisable.
-
Paramètres DBConnect : Assurez-vous que les paramètres @new mysqli() sont corrects pour les paramètres de votre serveur de base de données. Dans l'exemple de code, ces paramètres ont été modifiés par rapport à leurs valeurs d'origine.
Solution
Pour résoudre ce problème, considérez ce qui suit :
-
Réviser la logique du destructeur : Modifiez la méthode __destruct() pour fermer l'objet $DBConnect uniquement s'il y a aucune requête restante à exécuter. Cela empêchera la fermeture prématurée de la connexion.
-
Gestion des erreurs de connexion : Gérez les erreurs de connexion avec élégance dans le fichier de connexion à la base de données à l'aide de blocs try-catch ou d'autres techniques de gestion des erreurs.
-
Version PHP : L'erreur "L'objet mysqli est déjà fermé" peut également survenir dans PHP 8 en raison de changements dans la gestion des objets mysqli fermés. Assurez-vous que votre version de PHP est à jour.
Conseils de dépannage supplémentaires
- Utilisez mysqli::error pour vérifier le message d'erreur. associé à la requête ayant échoué.
- Assurez-vous que le démarrage de $_SESSION est appelé avant de créer la connexion mysqli objet.
- Vérifiez le script PHP pour toute autre instance où la connexion mysqli est fermée prématurément.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!