Apenas uma pergunta bastante simples com relação ao PDO em comparação ao MySQLi.
Com o MySQLi, para fechar a conexão você pode fazer:
$this->connection->close();
No entanto, com PDO, afirma que você abre a conexão usando:
$this->connection = new PDO();
mas para fechar a conexão que você configurou null
.
$this->connection = null;
Isso está correto e realmente liberará a conexão PDO? (Eu sei que ele faz conforme está definido null
.) Quer dizer, com o MySQLi você tem que chamar uma função ( close
) para fechar a conexão. O PDO é tão fácil quanto = null
desconectar? Ou existe uma função para fechar a conexão?
Respostas:
De acordo com a documentação, você está correto ( http://php.net/manual/en/pdo.connections.php ):
Observe que se você inicializar o objeto PDO como uma conexão persistente, ele não fechará automaticamente a conexão.
fonte
Note that if you initialise the PDO object as a persistent connection it will not automatically close the connection
Mas se uma conexão for persistente e eu explicitamente chamar NULL nela antes que o script termine, ela será fechada mesmo se for persistente, correto?fonte
É mais do que apenas definir a conexão como nula. Pode ser isso que a documentação diz, mas não é verdade para o mysql. A conexão permanecerá por mais um pouco (ouvi falar dos anos 60, mas nunca testei)
Se você quiser aqui a explicação completa, veja este comentário sobre as conexões https://www.php.net/manual/en/pdo.connections.php#114822
Para forçar o fechamento da conexão, você deve fazer algo como
fonte
Eu criei uma classe derivada para ter uma instrução mais autodocumentável em vez de "$ conn = null;".
Posso ligar para o meu código entre:
fonte
closeConnection
não deve estar ciente de que precisa copiar a referência para a variável em vez de atribuir o objeto. Em outras palavras, sua maneira de tentar codificar uma função de fechamento de PDO tem efeitos colaterais ruins, tornando-a não confiável. A única maneira de fazer isso seriacloseConnection
verificar quantas referências ao objeto PDO existem no código e lançar caso mais de 1 exista.Exemplo completo, com classe personalizada PDO2.
fonte