Classe genérica de conexão. Essa é pra guardar com carinho!
Boa tarde pessoal, olha eu aqui de novo, agora que já mostrei como configurar o apache + php + mysql, vou mostrar a vocês uma classe de conexão que uso em 90% das aplicações que faço em PHP, nos outros 10% não faço conexão com base de dados (tá explicado porque uso a classe só em 90%, rs).
Funciona da seguinte forma, nessa classe você pode utilizar métodos de conexão com “n” bancos de dados diferentes, passando apenas no método construtor o tipo de banco de dados que irá utilizar, no exemplo que vou mostrar nesse tutorial utilizo apenas conexão com MySQL e PostgreSQL, mas fica a critério de vocês qual tipo de banco de dados utilizar, basta adicionar mais uma cláusula nos métodos da classe, referente ao banco de dados que irá utilizar.
Neste tutorial não vou enrolar muito não, vou postar a classe inteira aqui e explicá-la nos comentários, crie um arquivo chamado Conn.php e dentro dele coloque o seguinte código:
<?php
/* Declaração da Classe deve ter o mesmo nome do arquivo (conceitos de OO) */
/**
* @author Dheyson Wildny - www.devfranca.com.br
*/
class Conn {
/* Declaração dos atributos da classe */
private $servidor;
private $usuario;
private $senha;
private $banco;
private $tipoBanco;
private $conn;
private $resultado;
private $sql;
/**
* @param String $tipo
* @param String $server
* @param String $user
* @param String $pass
* @param String $banco
*/
public function conn($tipo, $server, $user, $pass, $banco) {
$this->setTipoBanco($tipo);
$this->setServidor($server);
$this->setUsuario($user);
$this->setSenha($pass);
$this->setBanco($banco);
}
/**
* @param String $server
*/
public function setServidor($server) {
$this->servidor = $server;
}
/**
* @param String $user
*/
public function setUsuario($user) {
$this->usuario = $user;
}
/**
* @param String $pass
*/
public function setSenha($pass) {
$this->senha = $pass;
}
/**
* @param String $banco
*/
public function setBanco($banco) {
$this->banco = $banco;
}
/**
* @param String $tipo
*/
public function setTipoBanco($tipo) {
$this->tipoBanco = $tipo;
}
/**
* @return Conexão Aberta
*/
public function connDB() {
//Se o banco for MySQL
if ($this->tipoBanco == "mysql") {
$this->conn = mysql_connect($this->servidor, $this->usuario, $this->senha);
if(!$this->conn) {
echo "<p>Não foi possível conectar-se ao servidor MySQL. <br>Erro MySQL: ".mysql_error()."</p>";
exit();
} elseif (!mysql_select_db($this->banco, $this->conn)) {
echo "<p>Não foi possível selecionar o banco de dados desejado. <br>Erro MySQL: ".mysql_error()."</p>";
exit();
}
//Se o banco for PostgreSQL
} else if ($this->tipoBanco == "pgsql") {
$this->conn = pg_connect($this->servidor, $this->usuario, $this->senha);
if(!$this->conn) {
echo "<p>Não foi possível conectar-se ao servidor PostgreSQL. <br>Erro PgSQL: ".pg_errormessage()."</p>";
exit();
} elseif (!pg_select($this->banco, $this->conn)) {
echo "<p>Não foi possível selecionar o banco de dados desejado. <br>Erro MySQL: ".mysql_error()."</p>";
exit();
}
}
}
/**
* @return Fecha Conexão
*/
public function closeConnDB() {
if ($this->tipoBanco == "mysql") {
return mysql_close($this->conn);
} else if ($this->tipoBanco == "pgsql") {
return pg_close($this->conn);
} else {
return false;
}
}
/**
* @return Query - retorna o resultado de algum comando executado
*/
public function runQuery($sql) {
$this->connDB();
$this->sql = $sql;
if ($this->tipoBanco == "mysql") {
$this->resultado = mysql_query($this->sql);
} else if ($this->tipoBanco == "pgsql") {
$this->resultado = pg_query($this->sql);
}
if($this->resultado) {
$this->closeConnDB();
return $this->resultado;
} else {
$this->closeConnDB();
if ($this->tipoBanco == "mysql") {
exit("<p>Não foi possível executar o comando solicitado.<br>Erro MySQL: ".mysql_error()."</p>");
} else if ($this->tipoBanco == "pgsql") {
exit("<p>Não foi possível executar o comando solicitado.<br>Erro PgSQL: ".pg_errormessage()."</p>");
} else {
exit("<p>Não foi possível executar o comando solicitado.</p>");
}
}
}
/**
* @return Objeto de Conexão - Retorna uma instância da classe de conexão
*/
static public function conexao(){
$con = new Conn('mysql', 'localhost', 'root', '', 'devfranca');
return $con;
}
}
?>
Com esta classe de conexão vocês não precisarão de mais nada para realizar suas operações CRUD (Create, Retrieve, Update e Delete – Criar, Recuperar, Alterar e Deletar).
Para que quizer baixar essa classe prontinha, clique aqui.
Nos próximos tutoriais vou mostrar a vocês como aplicar essa classe de conexão, e então vocês vão perceber que essa classe pode ser aplicada com extrema facilidade em qualquer projeto que exija conexão com banco de dados.
Abraço e até a próxima!
4 Responses to “Classe genérica de conexão. Essa é pra guardar com carinho!”
Leave a Reply

Raphael on agosto 31st, 2009
Olá Dheyson, tudo bem?
Primeiramente gostaria de parabenizar-lhe pela organização do devfranca, estava muito legal, eu sou o Raphael, aquele que ficou famoso lá e até participou sorteando a licença do windows vista no final do evento.
Sobre a classe de conexão a banco de dados achei interessante a iniciativa, mas acredito que o próprio php a partir de sua versão 5.1 já possui nativamente uma alternativa para abstração da camada de dados muito mais segura, portável e performática que se chama PDO(Php Data Objects), vale ressaltar que na versão 5.0 a PDO está disponível como uma extensão PECL.
O Augusto Pascutti no 3º phpspcast até brincou com isso, ele diz +- assim:
“Pelo amor de Deus gente, não criem mais classe para manipular data nem dados no php, pois ele já possui classes para isso”
É sobre o PDO pode-se até fazer um paralelo sobre o que você disse sobre utilizar frameworks na sua palestra no devFranca, PDO já é uma solução pronta, segura e performática e se casa com o conceito de DRY - don’t repeat yourself.
Abraços e parabéns mais uma vez.
Link para a documentação da PDO:
http://br.php.net/pdo
Nelson Borges on setembro 3rd, 2009
Olá Rafael, muito legal o link, em breve estamos abrindo um espaço para todos, exemplo: devfranca.ning.com (este é um protótipo de como irá ficar o novo site) ai teremos um lugar para falar mais sobre tecnologia, espero que você também continue participando.
Abraço.
Danilo on setembro 25th, 2009
Amigos, tudo bem ?
Participei do DevFranca, sou aluno do 2º ano de Sistemas pela Unifran, e gostaria de saber como fazer colaborar com o DevFranca, e se possível futuramente ser um dos integrantes .
Grande abraço !!!
( obs: não sei se o Dheyson se lembra, conversamos bastante no final da palestra .Net, até brinquei com ele ( Dheyson ) porque o palestrante já estava com horário esgotado, rsrs )
Nelson Borges on outubro 5th, 2009
Danilo,
Claro que pode ajudar, será um prazer, primeiramente, faça o cadastro no http://devfranca.ning.com/ e vamos continuar conversando por lá.. ok ?
Abs