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 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 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 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 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 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 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 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 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 by Renato - November 10th, 2009 at 10:07
Adriano..
e no caso de update, delete?!
abraços
#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 by Godoy - December 10th, 2009 at 18:54
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 by Adriano Meira - January 16th, 2010 at 15:22
Opa chará, muito boa sua classe parabéns, me ajudou muito valeu!
=)