62 votes

Les connexions SQL ouvertes avec PDO en PHP doivent-elles être fermées?

Lorsque j'ouvre une connexion MySQL en PHP avec uniquement les fonctions MySQL intégrées, je fais ce qui suit:

 $link = mysql_connect($servername, $username, $password);
mysql_select_db($dbname);
//queries etcetera
mysql_close($link);
 

Lorsque j'ouvre une connexion avec PDO, cela ressemble à ceci:

 $link = new PDO("mysql:dbname=$dbname;host=$servername",$username,$password);
//prepare statements, perform queries
 

Dois-je fermer explicitement la connexion comme je le fais avec mysql_connect() et mysql_close() ? Sinon, comment PHP sait-il que ma connexion est terminée?

TIA.

76voto

DreadPirateShawn Points 3801

Utiliser $link = null laisser AOP sais qu'il peut fermer la connexion.

PHP: PDO Connexions Et la Gestion de la Connexion

Lors de la connexion à la base de données, une instance de la classe PDO est retournée à votre script. La connexion reste active pendant toute la durée de vie de l'objet PDO. Pour fermer la connexion, vous devez détruire l'objet en veillant à ce que toutes les autres références sont supprimés--vous faites cela en attribuant la valeur NULL à la variable qui contient l'objet. Si vous ne le faites pas explicitement, PHP va automatiquement fermer la connexion lorsque le script se termine.

13voto

hakre Points 102271

PDO n'offre pas une telle fonction sur son propre. Les connexions via PDO sont indirectement gérés par l'AOP objets refcount en PHP.

Mais parfois, vous voulez fermer la connexion de toute façon, quel que soit le refcount. Soit parce que vous ne pouvez pas le contrôler, le besoin pour des fins de test ou similaire.

Vous pouvez fermer le Mysql connexion avec PDO par l'exécution d'une requête SQL. Chaque utilisateur capable de se connecter au serveur Mysql est en mesure d' KILL au moins de son propre thread:

/*
 * Close Mysql Connection (PDO)
 */

$pdo_mysql_close = function (PDO $connection) {

    $query = 'SHOW PROCESSLIST -- ' . uniqid('pdo_mysql_close ', 1);
    $list  = $connection->query($query)->fetchAll(PDO::FETCH_ASSOC);
    foreach ($list as $thread) {
        if ($thread['Info'] === $query) {
            return $connection->query('KILL ' . $thread['Id']);
        }
    }
    return false;
};

$pdo_mysql_close($conn);

Liées Documentation De Mysql:

Liées Stackoverflow Questions:

11voto

Vexatus Points 502

Lorsque l'exécution du script PHP est terminée, toutes les connexions sont fermées. De plus, vous n'êtes pas obligé de fermer explicitement votre connexion avec mysql_close() .

5voto

JDelage Points 2346

Vous pouvez également limiter vos connexions aux fonctions locales. Ainsi, la connexion est fermée dès que la fonction est terminée.

0voto

ddddd Points 593

http://uk3.php.net/pdo

D'après ce que j'ai compris, je ne pouvais pas voir quand même le fermer dans le manuel php, et des exemples de scripts que j'ai rapidement examinés ne fermaient jamais la connexion de toute façon d'après ce que je pouvais voir.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X