Solo una pregunta bastante simple con respecto a PDO en comparación con MySQLi.
Con MySQLi, para cerrar la conexión puede hacer:
$this->connection->close();
Sin embargo, con PDO, indica que abre la conexión usando:
$this->connection = new PDO();
pero para cerrar la conexión que la configuró null
.
$this->connection = null;
¿Es esto correcto y realmente liberará la conexión PDO? (Sé que funciona como está configurado null
.) Quiero decir, con MySQLi tienes que llamar a una función ( close
) para cerrar la conexión. ¿Es PDO tan fácil como = null
desconectarlo? ¿O hay una función para cerrar la conexión?
Respuestas:
De acuerdo con la documentación, estás en lo correcto ( http://php.net/manual/en/pdo.connections.php ):
Tenga en cuenta que si inicializa el objeto PDO como una conexión persistente, no cerrará automáticamente la conexión.
fuente
Note that if you initialise the PDO object as a persistent connection it will not automatically close the connection
Pero si una conexión es persistente y llamo explícitamente a NULL antes de que finalice el script, se cerrará incluso si es persistente, ¿correcto?fuente
Es más que simplemente establecer la conexión en nula. Eso puede ser lo que dice la documentación, pero esa no es la verdad para mysql. La conexión se mantendrá un poco más (he escuchado 60, pero nunca lo probé)
Si quieres aquí la explicación completa mira este comentario sobre las conexiones https://www.php.net/manual/en/pdo.connections.php#114822
Para forzar el cierre de la conexión tienes que hacer algo como
fuente
Creé una clase derivada para tener una instrucción más autodocumentada en lugar de "$ conn = null;".
Entonces puedo llamar a mi código entre:
fuente
closeConnection
no debe ser consciente de que necesita copiar la referencia a la variable en lugar de asignar el objeto. En otras palabras, su forma de intentar codificar una función de PDO cercana tiene efectos secundarios negativos, lo que la hace poco confiable. La única forma de hacerlo seríacloseConnection
verificar cuántas referencias al objeto PDO existen en el código y arrojarlo en caso de que exista más de 1.Ejemplo completo, con clase personalizada PDO2.
fuente