J'étais toujours en supposant que c'est toujours une bonne pratique pour fermer la connexion à la base de données, quelle que soit la base de données / orm, comme MySQL_Close (), Propel :: Fermer () etc. P>
en référence à l'une de mes autres Question et Quelques autres recherches sur Internet, je suis venu de connaître un visage surprenant que la plupart des gens le recommencent que cela n'a pas d'importance si vous fermez la connexion lorsque la connexion est toujours fermée après la demande. P>
Cependant, je trouve ces réponses peu difficiles à digérer. La raison est que toutes les DB lib, orm fournir une méthode de près? Si c'est là, Quelqu'un peut-il faire passer une lumière dans quelles circonstances, nous devrions utiliser une méthode de fermeture pour fermer la connexion DB? & Si ces méthodes ne sont pas utiles du tout, pourquoi elles sont présentes dans toutes les libs / orm DB? P>
Ce fut une bonne discussion entre Bondye et Fluffeh et il a effacé mes doutes sur l'utilisation de la fermeture de la connexion. Merci à tous les deux. P>
Il est vraiment très difficile pour moi d'accepter une réponse car les deux réponses sont correctes sur sa place. Il suffit d'accepter la réponse avec tous les commentaires afin qu'il reste sur le dessus. Mais +1 aux deux réponses correctes. P>
4 Réponses :
C'est toujours une bonne pratique pour fermer une connexion de base de données lorsque vous n'en avez plus besoin. Même s'il est fermé automatiquement après la fin du script - cela peut être un autre deuxième ou un nombre de secondes fractionnées plus tard. Si vous n'en avez plus besoin, un utilisateur frappant une page et gaspiller la connexion de la base de données pendant une demi-seconde ne fera pas de différence - mais vingt le faire à la fois est soudainement 10 secondes de connexion ouverte - et que fait em> faire une différence. p>
En même temps, la réutilisation d'une connexion peut être une bonne pratique - la fabrication et l'ouverture de la connexion prend normalement au moins quelques millisecondes - et si vous êtes par exemple insérant quelques centaines de milliers de lignes, peu de millisecondes à chaque fois ajoute très vite. P>
D'une certaine manière, il n'est pas différent de définir une variable à NULL ou de le désautoriser. Vous ne EM> avez-vous pas em> pour le faire, mais propre code élégant et gestion des ressources est toujours em> une bonne chose. P>
Eh bien, je n'ai jamais eu beaucoup de pensée sur la façon dont les choses se passent en interne à PHP / Zend, mais je suppose que cela est maintenant nécessaire pour mes projets. Quelqu'un peut-il perdre de la lumière sur ce qui est plus coûteux parmi (deux liaison de fermeture de connexion; manuellement et par Zend) et (Laissez la connexion ouverte pour quelques millisecondes / secondes). Je suppose que, mais pas sûr, c'est à propos de la CPU (1 opération de fermeture supplémentaire) VS RAM (un objet de connexion open-open supplémentaire)?
@KAPILSHARMA Je n'ai pas couru des tests sauf quelques cas vraiment évidents dans certains cas, j'écris, mais dans le même temps, il sera probablement différent pour chaque serveur particulier et les ressources qu'il a. Vous pouvez exécuter quelques tests en utilisant Microtime pour voir combien de temps les choses prennent, mais généralement, si vous n'allez plus appeler mySQL, fermez-la. Si votre code prend un moment pour courir entre des déclarations, c'est pourrait i> une opportunité de fermer - mais mieux à vérifier.
Utilisation Grâce au système de comptage de référence introduit avec le moteur ZEND de PHP 4, une ressource sans plus de références à celle-ci est détectée automatiquement et elle est libérée par le collecteur des ordures. Pour cette raison, il est rarement nécessaire de libérer la mémoire manuellement. P>
blockQuote>
J'espère que cela vous aide à plus. P>
mysql_close () code> n'est généralement pas nécessaire, car les liens ouverts non persistants sont automatiquement fermés à la fin de l'exécution du script. P>
Et si cela est est i> référencé - mais des conditions (telles qu'une instruction si elle n'est pas encore déterminée) la cause de ne jamais être utilisée? Et si ce chèque est toujours une demi-seconde de temps d'exécution? Ou cinq secondes même? Ne disant pas que vous avez tort, mais cela peut être bon d'utiliser tous les outils donnés à votre meilleur.
Stackoverflow.com/questions/880885/... & Stackoverflow.com/Questtions/336078/...
Du premier (+16) Réponse: Si votre script a une bonne quantité de traitement à effectuer après avoir récupéré le résultat et a récupéré le jeu de résultats complet, vous devez définir la fermeture de la connexion. Si vous ne le faites pas, il y a une chance que le serveur MySQL atteindra sa limite de connexion lorsque le serveur Web est sous une utilisation intensive. I> C'est exactement i> Qu'est-ce que je dis que je dis avec Mate.
Voulez-vous fermer la base de données ou désaffecter la mémoire utilisée pour stocker les résultats de la requête? Tuxradar.com/practicalphp/9/4/3
L'OP a posé des questions sur les connexions, je viens d'utiliser une analogie de déséquilibre une variable si nécessaire.
Les connexions de base de données ne sont pas illimitées. Les logiciels de base de données commerciaux, en particulier, ont souvent des licences qui limitent le nombre de connexions simultanées à un nombre relativement petit. Dans une telle situation, vous souhaitez absolument fermer la connexion lorsque votre script n'utilise plus activement. Alors que PHP fermez automatiquement la connexion à la base de données lorsqu'un script se termine, il ne le fait pas tant que le visiteur a fini de télécharger la page. Si sa connexion est lente (commutation ou mobile), cela pourrait prendre dix, vingt secondes pour tout ce que vous savez. p>
Merci, c'est nouveau point que l'achèvement du script est considéré comme le téléchargement de tous les contenus.
Une doctrine comme une doctrine et une propultilité bien développées est bonne à la fermeture des connexions MySQL. Mais si vous utilisez droit PHP, j'ai vu beaucoup de problèmes de base de données suivis à des connexions non récoltées. Il est sage de fermer toutes les connexions DB à la fin de chaque script. P>