Maison >développement back-end >tutoriel php >Pourquoi est-ce que j'obtiens une erreur « L'objet mysqli est déjà fermé » dans mon code PHP ?

Pourquoi est-ce que j'obtiens une erreur « L'objet mysqli est déjà fermé » dans mon code PHP ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-09 15:47:15329parcourir

Why Am I Getting a

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 :

  1. 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.
  2. 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.
  3. 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 :

  1. 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.
  2. 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.
  3. 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn