Juste une question assez simple concernant PDO par rapport à MySQLi.
Avec MySQLi, pour fermer la connexion, vous pouvez faire:
$this->connection->close();
Cependant, avec PDO, il indique que vous ouvrez la connexion en utilisant:
$this->connection = new PDO();
mais pour fermer la connexion que vous avez définie null
.
$this->connection = null;
Est-ce correct et est-ce que cela libérera réellement la connexion PDO? (Je sais qu'il fait comme il est défini null
.) Je veux dire qu'avec MySQLi, vous devez appeler une fonction ( close
) pour fermer la connexion. PDO est-il aussi simple que = null
de se déconnecter? Ou y a-t-il une fonction pour fermer la connexion?
Réponses:
Selon la documentation, vous avez raison ( http://php.net/manual/en/pdo.connections.php ):
Notez que si vous initialisez l'objet PDO en tant que connexion persistante, il ne fermera pas automatiquement la connexion.
la source
Note that if you initialise the PDO object as a persistent connection it will not automatically close the connection
Mais si une connexion est persistante et que j'appelle explicitement NULL dessus avant la fin du script, elle sera fermée même si elle est persistante, n'est-ce pas?la source
C'est plus que simplement définir la connexion sur null. C'est peut-être ce que dit la documentation, mais ce n'est pas la vérité pour mysql. La connexion restera un peu plus longtemps (j'ai entendu des années 60, mais je ne l'ai jamais testée)
Si vous voulez ici l'explication complète voir ce commentaire sur les connexions https://www.php.net/manual/en/pdo.connections.php#114822
Pour forcer la fermeture de la connexion, vous devez faire quelque chose comme
la source
J'ai créé une classe dérivée pour avoir une instruction plus auto-documentée au lieu de "$ conn = null;".
Je peux donc appeler mon code entre:
la source
closeConnection
ne doit pas être conscient qu'il doit copier la référence à la variable au lieu d'attribuer l'objet. En d'autres termes, votre façon d'essayer de coder une fonction PDO proche a de mauvais effets secondaires, ce qui la rend peu fiable. La seule façon de le faire seraitcloseConnection
de vérifier combien de références à l'objet PDO existent dans le code, et de lancer au cas où plus de 1 existe.Exemple complet, avec la classe personnalisée PDO2.
la source