Jump to content

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


WoOo

Recommended Posts

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();  
  } 
}
?>
Link to comment
Share on other 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.

Link to comment
Share on other 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.

Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Link to comment
Share on other 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.

Link to comment
Share on other 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...

<3 life

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.