Classe de Conexão – PHP


Hoje vou mostrar como utilizar uma classe de conexão php/mysql. Quando comecei a trabalhar com php, fazia a conexão em cada página. Com isso, além de demandar muito tempo, se eu precisasse alterar o host de conexão, por exemplo, tinha que mexer em todos os arquivos que utilizavam aquele trecho de código.

Depois de um tempo, comecei a colocar essas configurações em um arquivo separado, e incluir este arquivo em minhas páginas. Se precisasse alterar algo relacionado com a configuração da conexão, alterava em um único arquivo.

Mas ainda existiam problemas. Escrever as funções mysql_fetch_array, mysql_num_rows, além de deixar o código “sujo”, deixa o sistema muito preso na tecnologia utilizada. Por exemplo, e se eu quisesse utilizar SQL Server, ao invés de mySql? Deveria alterar todas as menções de mysql_xxx para mssql_xxx, por exemplo (claro que nem todas as consultas sql seriam compatíveis, mas isto é outro assunto).

Por isso veio a necessidade de ENCAPSULAR essas funcionalidades relacionadas à conexão.

Então comecei a utilizar classe para realizar conexão. Vou mostrar uma das classes de conexão que desenvolvi, e que utilizo em meus projetos. Para não deixar esse post muito grande, não vou explicar o que significa cada detalhe da implementação (que não é complicada).

<?php

class Conexao{
/*
——————————————
| Classe de conexão
——————————————
| Adriano Godoy
——————————————
| www.adrianogodoy.com
——————————————
| Métodos:
| * desconectar -> encerra a conexão
| * consulta -> executa query sql
| * conta -> número de reultados
| * busca -> array resultado do select
|——————————————|
| Utilize à vontade ;- )
——————————————
*/

protected $user = “root”; // Usuário do banco de dados
protected $senha = “123″; // Senha do banco de dados
protected $bd = “banco_de_dados”; // Nome do Banco de dados MySQL
protected $server = “localhost”; //host – servidor
protected $con;

//Construtor
public function __construct() {
$this->con = mysql_connect($this->server, $this->user, $this->senha) or die(“Falha ao conectar com o banco de dados”);
mysql_select_db($this->bd, $this->con);
}

//Encerra a conexão
public function desconectar() {
mysql_close($this->con);
}

//Executa query sql
public function consulta($sql) {
$res = mysql_query($sql,$this->con);
if(!$res){
return false;
}else{
if(substr($sql,0,6) == “INSERT” && mysql_insert_id($this->con)){
return mysql_insert_id($this->con);
}else{
return $res;
}
}
}

//Número de resultados que atendem a uma dada consulta
public function conta($res) {
if($res){
return mysql_num_rows($res);
}
}

//Array resultado do select
public function busca($res) {
if($res){
return mysql_fetch_array($res);
}
}
} //fim da classe
?>

Para utilizá-la, no início de seu código você deve incluir o arquivo com essa classe (lembre-se de seguir convenções: inicie nome de classes com letra maiúscula, e o nome do arquivo deve ser o mesmo da classe) e instancia um objeto da classe, da seguinte forma:

include_once(“classes/Conexao.php”); //inclui
$conexao = new Conexao(); //instancia

Pronto! Agora, para realizar uma consulta:

$consulta1 = $conexao->consulta(“SELECT * FROM tabela WHERE x = y”);

e para obter os dados (mysql_fetch_array):

$dados1 = $conexao->busca($consulta1);

vale dentro do while também, caso a consulta vá retornar mais de um registro:

while($dados1 = $conexao->busca($consulta1))

Você pode contar quantos registros foram afetados pela consulta:

$cont1 = $conexao->conta($consulta1);

e, após terminar suas consultas, fechar a conexão:

$conexao->desconectar();

É isso, espero que seja útil para quem está começando. Abraço.

  1. #1 by Henrique Alves - September 20th, 2008 at 07:43

    Estava precisando de trocar minha classe de conexão :-)
    Essa está bem simples, mas tem tudo que preciso.
    Valeu!

  2. #2 by Chico - October 2nd, 2008 at 17:20

    Muito bom Godoy! Vai ser útil pra mim, e pra vc também né? Vou te incomodar menos.
    Abraço.

  3. #3 by Renato - May 4th, 2009 at 02:23

    Vai ser muito útil pra mim! Vou usar agora mesmo.

    Já me ajudou bastante com o tópico sobre o .htaccess (juntei informações do seu post + do phpbrasil e cheguei onde queria), agora com essa classe, arrebentou!!

  4. #4 by Renato - May 27th, 2009 at 13:46

    Só uma nota: ficou faltando a tag de abertura “<?”, o que me tomou uns 10 minutos batendo a cabeça (sorte que não demorou tanto). Estou avisando porque outros podem gastar mais tempo… :)

  5. #5 by Godoy - May 27th, 2009 at 16:01

    Está certo.. o wordpress comeu a tag com angú :-)
    mas o cidadão que está utilizando classes para programar em php TEM que saber que deve-se abrir a tag antes do código php… acho que descobrir isso não demoraria tanto tempo..
    De todo modo, valeu pelo alerta. Vou consertar aqui ;-)

  6. #6 by Renato - May 28th, 2009 at 00:39

    Olá, Adriano. Poderia explicar melhor como salvar os dados obtidos quando mais de 1 row é retornada?

    Grato

  7. #7 by Godoy - May 28th, 2009 at 12:20

    Olá Renato,
    não sei se entendi corretamente, mas caso sua consulta retorne mais de uma tupla, você pode obter estes dados colocando o mysql_fetch_array dentro de um while:

    $consulta = mysql_query(“SELECT blablabla”);
    while($row = mysql_fetch_array($consulta)) {
    //aqui varrerá todo o conjunto de registros retornado,
    // bastando manipular da forma que necessitar.
    }

    o equivalente com a classe seria:
    $consulta = $conexao->consulta(“SELECT blablablá”);
    while($row = $conexao->busca($consulta)) {
    //aqui varrerá todo o conjunto de registros retornado
    }

    espero ter ajudado. Abraço

  8. #8 by Rodolfo - September 25th, 2009 at 06:54

    Ola Pessoa, eu tneho uma questao curiosa, eu usei uma classe de conexao com ibase_query(); semelhante a essa, mas tive problemas em acessar a classe pois meu script esta em uma outra classe, a questao é a seguinte, é possivel acessar essa classe de conexao apartir de uma outra classe onde rodam meus serviços? eu tentei usar variaveis globais mas nao sei se o erro esta na conexao com o banco ou no rlacionamento das classes! vlw

  9. #9 by Renato - November 10th, 2009 at 10:07

    Adriano..
    e no caso de update, delete?!

    abraços

  10. #10 by Godoy - December 10th, 2009 at 18:51

    Olá Rodolfo, desculpe a demora, agora estou reativando o blog..
    não sei se entendi bem, mas se quer acessar atributos de uma classe (valores de variáveis), vc deveria fazer métodos get na classe que será acessada. Este é o modo correto de se utilizar classes, pensando no encapsulamento.
    Variáveis globais poderia até funcionar, mas seria um modo “gambiarrado” de fazer esse relacionamento.. o correto seria utilizar um método get que retorne o atributo que vc precisa, ou criar um relacionamento entre as classes, utilizando heranca, ou o que for mais conveniente.
    abraço

  11. #11 by Godoy - December 10th, 2009 at 18:54

    Renato :

    Adriano..
    e no caso de update, delete?!

    abraços

    UPDATE, DELETE, SELECT… são funções do mysql. Elas que devem ser executadas dentro do método consulta() da classe, que executará a query passada.

  12. #12 by Adriano Meira - January 16th, 2010 at 15:22

    Opa chará, muito boa sua classe parabéns, me ajudou muito valeu!
    =)

(will not be published)

Anti-Spam Protection by WP-SpamFree

  1. No trackbacks yet.