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

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

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

quand j'ouvre une connexion avec AOP, il 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 j'en ai fini avec ma connexion?

TIA.

61
demandé sur UKB 2009-06-26 02:57:58

6 réponses

utilisez $link = null pour faire savoir à AOP qu'il peut fermer la connexion.

PHP: PDO Connexions Et la Gestion de la Connexion

après une connexion réussie à 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 cet objet AOP. Pour fermer la connexion, vous devez détruire l'objet en veillant à ce que toutes les autres références sont supprimé--vous faites cela en assignant NULL à la variable qui détient l'objet. Si vous ne le faites pas explicitement, PHP fermera automatiquement la connexion à la fin de votre script.

76
répondu DreadPirateShawn 2010-10-28 12:58:29

AOP n'offre pas une telle fonction seule. Les connexions via PDO sont gérées indirectement via les objets PDO refcount en PHP.

mais parfois vous voulez fermer la connexion de toute façon, indépendamment du refcount. Soit parce que vous ne pouvez pas le contrôler, besoin de lui à des fins de test ou similaire.

vous pouvez fermer la Mysql connexion avec PDO en lançant une requête SQL. Chaque utilisateur est capable de se connecter au serveur Mysql est capable de KILL au moins 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);

Documentation Mysql Connexe:

Liées Stackoverflow Questions:

12
répondu hakre 2017-05-23 12:03:05

lorsque le script PHP termine l'exécution, toutes les connexions sont fermées. De plus, vous n'avez pas à fermer explicitement votre connexion avec mysql_close() .

11
répondu Vexatus 2013-12-19 07:23:31

vous pouvez également limiter vos connexions à l'intérieur des fonctions locales. De cette façon, la connexion est fermée dès que la fonction est terminée.

5
répondu JDelage 2010-10-28 12:57:16

bien vu que le $link pour le PDO se voit attribuer un objet, PHP le définirait comme nul dès que le script s'exécute de sorte qu'il ne soit plus un objet. Par conséquent, vous pourriez juste faire:

$link = new PDO("mysql:dbname=$dbname;host=$servername",$username,$password);

//prepare statements, perform queries

$link = null;
1
répondu Rob Holland 2013-07-04 21:34:51

http://uk3.php.net/pdo

D'après ce que j'ai compris, je ne pouvais pas voir de toute façon de le fermer dans le manuel php, et les exemples de scripts que j'ai rapidement regardé n'ont jamais fermé la connexion de toute façon de ce que je pouvais voir.

0
répondu pjanaway 2009-06-25 23:03:24