J'ai créé une classe MySQLi simple pour un projet sur lequel je travaille afin de la rendre plus facile et plus simple à tirer et à pousser vers la base de données. (également pour se familiariser avec OOP en PHP)PHP comment vérifier si une requête MySQLi doit être fermée?
Un problème que je continue à courir est dans un effort pour le rendre aussi efficace que possible. J'essaie de fermer/libérer chaque requête/instruction/ensemble de résultats. Ce faisant, je reçois l'erreur suivante beaucoup:
Warning: mysqli_result::close(): Couldn't fetch mysqli_result
Je pense que je reçois ce qui précède précisément parce qu'il essaie de fermer la requête deux fois de suite.
Actuellement, ma classe peut faire des déclarations préparées et non préparées. J'essaie donc de fermer les requêtes/instructions à 2 endroits. Je vérifie lors de la préparation d'une déclaration si j'ai déjà préparé une déclaration, si c'est le cas, je dois fermer l'ancien avant d'en faire un nouveau et enfin dans le destructeur de la classe.
Je me rends compte que je pourrais juste fermer la requête/déclaration après avoir tiré et stocké le résultat, mais cela semble être en désordre pour quelques raisons. Pour un, il supprime la possibilité de réutiliser l'instruction préparée. En plus de m'interdire de tirer quelques informations sur la requête après qu'elle a été exécutée, comme les lignes affectées et autres. Je sais que je pourrais simplement stocker cette information pour chaque requête et ce non, mais il semble que la bonne façon de résoudre ce problème serait de fermer/libérer la requête/instruction si je dois en faire une autre, et encore à la fin du script.
J'ai essayé de jeter un coup d'œil sur la façon dont je devrais gérer correctement cette tâche, mais j'ai été incapable de trouver quoi que ce soit. Donc, ma question est, est-il de toute façon de tester si une requête ou une déclaration doit être fermée ou libérée? Ou y a-t-il une meilleure façon de tenter de résoudre ce problème?
Merci pour toute aide ou information que tout le monde peut vous offrir.
Hrm cela semble être un peu vrai. Je jouais avec un code de test faisant un 'var_dump' après l'exécution et l'autre après la récupération. Ils impriment la même chose. Lorsque vous faites un 'var_dump' après une fermeture bien que vous obteniez' L'accès à la propriété n'est pas encore autorisé ', il est évident que vous faites quelque chose de différent. Bien que, si c'est différent, l'efficacité est la question? De même, lorsque je limite une requête à 1 ligne (par exemple 'LIMIT 0, 1'), l'appel de $ stmt-> fetch() lui-même ne ferme pas l'instruction. Mais si je fais une boucle while et echo pour confirmer qu'il n'y a qu'une seule ligne, elle la ferme. Des idées? – anomareh