Maison > développement back-end > Problème PHP > Comment fermer la connexion avec PDO en PHP

Comment fermer la connexion avec PDO en PHP

醉折花枝作酒筹
Libérer: 2023-03-10 19:24:02
avant
3013 Les gens l'ont consulté

Cet article vous présentera comment fermer la connexion avec PDO en PHP. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Comment fermer la connexion avec PDO en PHP

Lorsque nous écrivions l'opération de connexion mysql à la main auparavant, nous utilisions généralement mysql_close() pour fermer la connexion à la base de données. Cependant, dans le développement moderne, l'utilisation générale des frameworks nous amènera à ignorer l'encapsulation sous-jacente, et la plupart des frameworks utilisent par défaut PDO pour les opérations de base de données. Alors, savez-vous comment PDO ferme la connexion de données ?

Description officielle

Pour fermer la connexion, vous devez détruire l'objet pour vous assurer que toutes les références restantes à celui-ci sont supprimées. Vous pouvez attribuer une valeur NULL au. variable objet. Si vous ne le faites pas explicitement, PHP fermera automatiquement la connexion à la fin du script.
$pdo = new PDO('mysql:host=127.0.0.1;port=3306;dbname=blog_test', 'root', '');
$pdo = null;
Copier après la connexion

La documentation officielle est très claire, c'est-à-dire qu'il suffit d'attribuer NULL à l'objet PDO. Mais les choses sont-elles vraiment si simples ?

Test réel

Faisons un test comme celui-ci Dans des circonstances normales, après avoir ouvert la connexion à la base de données, nous ne la fermerons pas directement, mais devrons l'effectuer. certaines opérations.

$pdo = new PDO('mysql:host=127.0.0.1;port=3306;dbname=blog_test', 'root', '');

$stmt = $pdo->prepare('SELECT * FROM zyblog_test_user');
$stmt->execute();

$pdo = null;
sleep(60);
Copier après la connexion

Après avoir exécuté le code ci-dessus, nous utilisons show full processlist dans la base de données ; pour visualiser le processus de connexion, nous constaterons que la connexion actuelle n'est pas fermée immédiatement, mais sera fermée après 60 secondes, c'est-à-dire , une fois l'exécution de la page terminée. Il semble que $pdo = null; ne s'est pas exécuté correctement.

En fait, cette situation a été expliquée dans les documents officiels, mais les gens n'y prêtent peut-être pas attention. [L'objet doit être détruit pour garantir que toutes les références restantes à celui-ci sont supprimées]. Dans le code ci-dessus, la fonction d'instruction SQL précompilée $stmt appelle la méthode dans l'objet $pdo, créant une relation de dépendance de référence entre elles. dans ce cas, donner directement $pdo = null n'a aucun effet, nous devons également attribuer $stmt à null.

$pdo = new PDO('mysql:host=127.0.0.1;port=3306;dbname=blog_test', 'root', '');

$stmt = $pdo->prepare('SELECT * FROM zyblog_test_user');
$stmt->execute();

$stmt = null;
$pdo = null;
sleep(60);
Copier après la connexion

test mysqli

Il y aura donc ce problème si j'utilise le composant d'extension par défaut de mysqli, c'est-à-dire que j'utilise close() dans l'objet mysqli pour fermer la connexion à la base de données ? Ou testez-le directement avec du code. (L'extension mysql est obsolète et n'est pas recommandée. Si vous souhaitez encapsuler vous-même la classe d'opération de base de données ou écrire une petite démo, il est préférable d'utiliser mysqli)

$conn = new mysqli('127.0.0.1', 'root', '', 'blog_test');

$result = $conn->query('SELECT * FROM zyblog_test_user');
$stmt = $conn->prepare("SELECT * FROM zyblog_test_user");
$stmt->execute();

$conn->close();

sleep(60);
Copier après la connexion

Après avoir exécuté le code ci-dessus, nous vérifions le connexion à la base de données Le processus ne verra pas la connexion qui est toujours en cours d'exécution. En d'autres termes, appeler la méthode close() dans mysqli peut directement fermer immédiatement la connexion à la base de données.

Résumé

En fait, le contenu d'aujourd'hui est également l'information contenue dans une note sur le document officiel concernant la connexion à la base de données. Un maître a découvert ce problème il y a longtemps et l'a partagé, mais la plupart des gens ne connaissent pas du tout ce problème, et beaucoup de gens ne savent même pas que PDO peut fermer la connexion à la base de données. Bien que le framework nous apporte de la commodité, il résume si bien beaucoup de choses que de nombreux amis ne se soucient pas du contenu sous-jacent. Cependant, lorsque vous passez à un niveau supérieur, ces éléments sous-jacents deviennent souvent votre obstacle.

Code de test :

https://github.com/zhangyue0503/dev-blog/blob/master/php/202008/source/PHP%E4%B8%ADPDO%E5%85%B3%E9%97%AD%E8%BF%9E%E6%8E%A5%E7%9A%84%E9%97%AE%E9%A2%98.php
Copier après la connexion

Apprentissage recommandé : Tutoriel vidéo php

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!

Étiquettes associées:
php
source:segmentfault.com
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal