Nota: O link para o servidor será fechado assim que a execução do script terminar, a menos que seja fechado antes chamando explicitamente mysql_close ().
Se o seu script tiver uma boa quantidade de processamento a ser executado depois de buscar o resultado e tiver recuperado o conjunto de resultados completo, você definitivamente deve fechar a conexão. Caso contrário, há uma chance de o servidor MySQL atingir seu limite de conexão quando o servidor web estiver sob uso intenso. Se você não puder fechar a conexão MySQL até próximo ao final do script, é mais limpo, embora desnecessário fazer isso explicitamente.
Não tenho certeza de como o fastcgi afeta as coisas. Uma página afirma que uma construção de PHP que suporta fastcgi criará conexões persistentes, mesmo para mysql_connect. Isso contradiz a documentação de que a conexão é encerrada quando o processo, em vez do script, termina. Em vez de testá-lo, vou recomendar o uso de mysql_close (). Na verdade, eu recomendo usar o PDO , se estiver disponível.
Isso significa que se o usuário fechar a página (por exemplo) mais cedo (ou houver algum erro), a conexão pode permanecer aberta?
Toni Michel Caubet
1
@Toni Michel Caubet "The link to the server will be closed as soon as the execution of the script ends."Quando o usuário fecha uma página antes do tempo, não importa para o servidor PHP. Ele executa o script como sempre e termina o script como sempre. Apenas o usuário não verá o resultado.
flechador
@ToniMichelCaubet Você sabe que o php é executado no servidor?
clockw0rk
1
Sim, mas você percebe que meu comentário foi há 5 anos?
Bem, considerando que até mesmo a página de manual para mysql_closediz "Usar mysql_close () geralmente não é necessário, pois links abertos não persistentes são automaticamente fechados no final da execução do script." Eu realmente não consideraria uma má prática não fechar a conexão.
nico
4
"Não vejo por que você não gostaria de fechá-lo." Você não gostaria de fechá-lo se houver alguma chance de você precisar dele novamente.
Frank Farmer
1
se você usar ajax então se a conexão for fechada então toda vez que você tentar usar ajax a conexão será aberta e fechada novamente e isso valerá a pena deixar a conexão aberta para o servidor e o cliente não se importar com a conexão aberta ou não ele cuidado para que o site seja rápido
Robert,
de fato, pode ser crucial !!! se a carga do servidor estiver alta e você tiver muitas conexões não fechadas, como dito por outra pessoa mais acima, isso pode levar a um servidor que não responde, então eu diria que é muito importante!
oliiix
Melhor fechar. Fácil e sem problemas.
José Carlos PHP
4
Ao usar algo como cgi, é completamente desnecessário fechar suas conexões mysql, pois elas fecham automaticamente no final da execução do script. Ao usar tecnologias persistentes como mod_perl e outras, que mantêm suas conexões entre as solicitações, é importante manter o controle das conexões, variáveis globais, etc.
Basicamente, para dados persistentes, limpe depois de você. Para dados triviais e não persistentes, tudo irá embora quando a solicitação terminar. De qualquer forma, a melhor prática é sempre fechar suas conexões.
Ele está falando sobre PHP, que não é persistente, então isso não se aplica.
Sasha Chedygov
2
É fechado assim que o script conclui a execução. A menos que você tenha aberto uma conexão persistente. Idealmente, você deve liberar um recurso (uma conexão aqui) assim que terminar de usá-lo. A menos que haja uma boa chance de que você precise dele novamente em breve na execução.
O pool de conexões ou o uso de conexões persistentes (se é o que você quis dizer) é uma boa ideia se você estiver atrás de um único servidor de banco de dados. No entanto, se houver mais servidores e você estiver fazendo o balanceamento de carga, isso pode prejudicar a distribuição do trabalho. Normalmente, alguns clientes executam consultas pesadas, enquanto outros executam consultas mais leves. Portanto, se a mesma conexão for usada em mais de n, alguns servidores sofrerão uma carga pesada, enquanto outros estarão subutilizados. Considere o uso de ttls menores e tamanho de pool de conexão variável.
A maioria dos CMSs fecha a conexão MySQL no final da solicitação, o que é realmente insignificante, porque o PHP fará isso de qualquer maneira.
No entanto, se você tiver um script em que a conexão não é mais necessária, digamos no meio do script, e então outras atividades pesadas acontecem, é uma boa ideia fechar explicitamente a conexão. Isso irá liberar alguns recursos.
Agora, muito se falou sobre os benefícios de fechar uma conexão, mas quase nada foi dito sobre os benefícios de não fechá-la. Essencialmente, se você não fechar a conexão no final de um script, você realmente estará economizando alguns recursos. Imagine um aplicativo da web (ou qualquer aplicativo) recebendo 100 visualizações de página / segundo. Portanto, a cada segundo, você precisará invocar mysqli_close100 vezes - o que significa que, a cada segundo, você terá 100 viagens de ida e volta desnecessárias ao servidor de banco de dados para fechar as conexões abertas. Do ponto de vista do desempenho, isso é pura sobrecarga, já que o PHP verificará se há conexões abertas quando o script for concluído de qualquer maneira e fechará essas conexões, e pode ser que, porque tudo acontece tão rapidamente, que o PHP não veja que você tem fechou essas conexões e tentará fechá-las novamente.
Observação: a resposta acima assume que você não está usando conexões persistentes (conexões persistentes não são usadas em nenhum dos principais CMSs).
Respostas:
Da documentação :
Se o seu script tiver uma boa quantidade de processamento a ser executado depois de buscar o resultado e tiver recuperado o conjunto de resultados completo, você definitivamente deve fechar a conexão. Caso contrário, há uma chance de o servidor MySQL atingir seu limite de conexão quando o servidor web estiver sob uso intenso. Se você não puder fechar a conexão MySQL até próximo ao final do script, é mais limpo, embora desnecessário fazer isso explicitamente.
Não tenho certeza de como o fastcgi afeta as coisas. Uma página afirma que uma construção de PHP que suporta fastcgi criará conexões persistentes, mesmo para mysql_connect. Isso contradiz a documentação de que a conexão é encerrada quando o processo, em vez do script, termina. Em vez de testá-lo, vou recomendar o uso de mysql_close (). Na verdade, eu recomendo usar o PDO , se estiver disponível.
fonte
"The link to the server will be closed as soon as the execution of the script ends."
Quando o usuário fecha uma página antes do tempo, não importa para o servidor PHP. Ele executa o script como sempre e termina o script como sempre. Apenas o usuário não verá o resultado.É crucial? Não muito
É considerada uma boa prática a seguir? Sim.
Não vejo por que você não gostaria de fechá-lo.
fonte
mysql_close
diz "Usar mysql_close () geralmente não é necessário, pois links abertos não persistentes são automaticamente fechados no final da execução do script." Eu realmente não consideraria uma má prática não fechar a conexão.Ao usar algo como cgi, é completamente desnecessário fechar suas conexões mysql, pois elas fecham automaticamente no final da execução do script. Ao usar tecnologias persistentes como mod_perl e outras, que mantêm suas conexões entre as solicitações, é importante manter o controle das conexões, variáveis globais, etc.
Basicamente, para dados persistentes, limpe depois de você. Para dados triviais e não persistentes, tudo irá embora quando a solicitação terminar. De qualquer forma, a melhor prática é sempre fechar suas conexões.
fonte
É fechado assim que o script conclui a execução. A menos que você tenha aberto uma conexão persistente. Idealmente, você deve liberar um recurso (uma conexão aqui) assim que terminar de usá-lo. A menos que haja uma boa chance de que você precise dele novamente em breve na execução.
O pool de conexões ou o uso de conexões persistentes (se é o que você quis dizer) é uma boa ideia se você estiver atrás de um único servidor de banco de dados. No entanto, se houver mais servidores e você estiver fazendo o balanceamento de carga, isso pode prejudicar a distribuição do trabalho. Normalmente, alguns clientes executam consultas pesadas, enquanto outros executam consultas mais leves. Portanto, se a mesma conexão for usada em mais de n, alguns servidores sofrerão uma carga pesada, enquanto outros estarão subutilizados. Considere o uso de ttls menores e tamanho de pool de conexão variável.
fonte
A maioria dos CMSs fecha a conexão MySQL no final da solicitação, o que é realmente insignificante, porque o PHP fará isso de qualquer maneira.
No entanto, se você tiver um script em que a conexão não é mais necessária, digamos no meio do script, e então outras atividades pesadas acontecem, é uma boa ideia fechar explicitamente a conexão. Isso irá liberar alguns recursos.
Agora, muito se falou sobre os benefícios de fechar uma conexão, mas quase nada foi dito sobre os benefícios de não fechá-la. Essencialmente, se você não fechar a conexão no final de um script, você realmente estará economizando alguns recursos. Imagine um aplicativo da web (ou qualquer aplicativo) recebendo 100 visualizações de página / segundo. Portanto, a cada segundo, você precisará invocar
mysqli_close
100 vezes - o que significa que, a cada segundo, você terá 100 viagens de ida e volta desnecessárias ao servidor de banco de dados para fechar as conexões abertas. Do ponto de vista do desempenho, isso é pura sobrecarga, já que o PHP verificará se há conexões abertas quando o script for concluído de qualquer maneira e fechará essas conexões, e pode ser que, porque tudo acontece tão rapidamente, que o PHP não veja que você tem fechou essas conexões e tentará fechá-las novamente.Observação: a resposta acima assume que você não está usando conexões persistentes (conexões persistentes não são usadas em nenhum dos principais CMSs).
fonte