• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

WoOo

[Discussão] Deve-se abrir/fechar uma ligação à bd por cada query?

7 mensagens neste tópico

Viva,

Andava aqui a rever algum código antigo de uma aplicação que desenvolvi há algum tempo atás e decidi "limpar um pouco as coisas".

Lembrei-me então de criar duas funções, uma para abrir a ligação à bd e outra para fechar, isto para não tar sempre a repetir o código ao longo do projecto e ao mesmo tempo evitar que algumas ligações ficassem abertas como acontecia por vezes.

Acontece que antes de abrir este tópico decidi fazer uma pesquisa e vi que algumas pessoas dizem ser mau abrir uma ligação por cada query, outras usam sem qualquer problema, portanto gostava de ouvir algumas opiniões.

Fica aqui um pequeno exemplo de como pensei organizar o meu código nesta situação:

page.php

<?php include ('include/functions.php'); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
  ...
  <?php
    ...
    if (!isset($varX)) setValue2();
    ...
  ?>
  ...

functions.php

<?php

function dbConnect()
{
    @$con = mysql_connect('db_host','db_user','db_pass');
    if(mysql_select_db('db_name'))
    {
      return true;
    }
    else
    {
      return false;
    }
}

function dbClose()
{
  mysql_close();
}

function setValue1()
{
  if(dbConnect())
  {
    ...
    dbClose();  
  } 
}

function setValue2()
{
  if(dbConnect())
  {
    ...
    dbClose();  
  } 
}

function setValue3()
{
  if(dbConnect())
  {
    ...
    dbClose();  
  } 
}
?>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu, em todos os processos que faço, abro uma ligação no inicio da página e fecho-a no fim da página. Na minha opinião, é gastar recursos estar sempre a abrir e fechar a conexão.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, recentemente tenho sido mais adepto dessa prática.

Neste caso como quero as funções à parte, posso sempre fazer algo como:

<?php 
include ('include/functions.php'); 
dbConnect();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
  ...
  <?php
    ...
    if (!isset($varX)) setValue2();
    ...
  ?>
  ...
</html>
<?php
dbClose();
?>

Evito estar sempre a abrir/fechar conforme o número de queries.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Penso que não é preciso fechar a ligação quando usam o mysql_connect, pois ele faz isso no fim da execução do script, ou a pedido, usando a função mysql_close().

Note: The link to the server will be closed as soon as the execution of the script ends, unless it's closed earlier by explicitly calling mysql_close().

Se o interesse for manter a ligação aberta e fechar apenas quando explicitamente necessário, podem usar a função mysql_pconnect.

Quanto ao usar uma só ligação para várias consultas, acho o mais correcto.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, ele fecha no final do script, é mais por uma questão de hábito.

O mysql_pconnect() por acaso nunca usei, faz-me confusão deixar a ligação aberta quando sei que não irei precisar dela!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Alinho na opinião do resto da turma, nunca me dei mal a abrir uma ligação só.

Contudo, uso duas ligações:

- Uma só para leitura, que é a que é usada em 90% das vezes

- Uma para leitura e escrita, que só chamo quando tenho que escrever na bd.

No caso da ligação persistente, nem vejo qual é vantagem. Alguém me explica ?

Quanto a fechar a ligação, nunca uso o fecho. Acabando o script, as ligações são automáticamente fechadas. Também nunca me dei mal assim.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Deves fazer apenas uma ligação à base de dados. Quando escreves para um ficheiro, também não abres e fechas o ficheiro a cada escrita ou leitura.

No caso da ligação persistente, nem vejo qual é vantagem. Alguém me explica ?

Quanto a fechar a ligação, nunca uso o fecho.

A vantagem é que não tens de estar a negociar uma nova ligação e a efectuar a autenticação com a base de dados a cada query. Duvido que isso funcione decentemente para um site com uma grande carga.

Quanto ao fechar, deves fechar. É uma linha de código e convém ser sempre explicito e fazer as coisas como deve ser. Só porque hoje o PHP fecha todas as ligações, isso não garante que na próxima versão isso também aconteça. E também porque estás a criar maus hábitos como programador...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora