Conexão ao MySQL usando classe PHP estática

Publicado por bruno em 16/10/2009

[ Hits: 11.748 ]

Blog: http://sites.google.com/site/brnlinophp/

 


Conexão ao MySQL usando classe PHP estática



Meu objetivo é mostrar uma maneira mais dinâmica de criar uma classe para conexão de banco de dados.

Tentarei primeiramente ser direto com o código-fonte e em seguida explicarei como construí essa classe. Esta não poderá ser a melhor, mas mostrará a forma básica de construir uma classe de conexão de forma correta, é claro que existem outras dicas de outros sites ou blogs que fazem a mesma coisa, mas segue para quem tem interesse de aprender ou aperfeiçoar.

<?php
/**
* Classe estática com objetivo de criar conexão e executar os comandos SQL.
* Objetivo é estabelecer a conexão, executar as dml, dql e fechar conexão.
* @version 1.0.0
* @author Bruno de Lima Fagundes
*/

class ConexaoMysql {
    private static $host = "localhost";
    private static $user = "root";
    private static $pass = "root";
    private static $banco = "Banco";

    /**
     * Criar conexão junto ao banco MySQL.
     * Objetivo e estabelecer a conexão e retornar o link.
     * throws  1 - Erro na conexão
     * throws  2 - Banco não existe
     * @return conexao Conexão estabelecida
     */

    public static function getConexao () {
    // Conectando e recuperando o link
        $conexao = @mysql_connect(self::$host,self::$user,self::$pass);

        if (!$conexao) throw new Exception("(".mysql_errno().") Erro ao acessar ".self::$host,1);

        if (!mysql_select_db(self::$banco,$conexao))
            throw new Exception("(".mysql_errno($conexao).") Banco de dados não existe ".self::$banco,2);

        return $conexao;

    }

    /**
     * Método para executar a Linguagem de Manipulação de Dados
     * throws  3 - Query não é DML
     * throws  4 - Erro ao executar SQL
     * @@version A
     * @param conexao $conexao Conexão já estabelecida
     * @param string $query Query já definida
     */

    public static function dml ($conexao,$query) {
        if (!self::ehDmlouDql($query) == "dml")
            throw new Exception("Query não é Linguagem de Manipulação de Dados",3);
            
        $resultado = mysql_query($query, $conexao);

        if (mysql_error($conexao))
            throw new Exception("(".mysql_errno($conexao).") ".$query,4);
    }

    /**
     * Método para fechar conexão
     * throws  7 - Falha em fechar conexão
     * @param conexao $conexao Conexão já estabelecida
     */

    public static function fecharConexao ($conexao) {
        if (!mysql_close($conexao))
            throw new Exception("(".mysql_errno($conexao).") Não foi possível fechar a conexão",7);
    }
}
?>

Para aquele que não compreendeu muito bem, tentarei explicar passo a passo:

A ideia inicial é criar um objeto estático que retornará a conexão do banco ou caso contrário retornará uma exceção, o objetivo não é instanciar um objeto ou chamar uma função para conexão, pois sabemos que a conexão tem como objetivo de criar simplesmente uma conexão e retornar o link da conexão, portanto foi criado usando o método estático (que não precisa instanciar o objeto).

Como quem programa a partir do PHP 5, provavelmente já programa orientada a objeto, portanto deve saber que um método estático só acessa as variáveis da classe se a variável também é estática.

Obs.: Para acessar variável estática da classe, ao invés de usar $this, usa-se self.

O método getConexao simplesmente conecta ao banco de dados e retorna o link da conexão.

Para que possamos tratar caso o ocorra um erro e para que não pareça na tela aquela mensagem horrível para o usuário, foi criada uma exceção caso ocorra algum erro na tentativa de conexão.

Como toda conexão aberta deve ser fechada (para não sobrecarregar o banco), foi elaborado um método fecharConexao, neste caso deverá apenas informar no atributo a própria conexão já estabelecida. Como ocorre no método conexão, o mesmo há uma exceção para poder ser tratada caso ocorra algum erro ao fechar a conexão.

Peço desculpa por não detalhar mais esta dica, mas estarei editando assim que possível para deixar mais clara essa classe de conexão ao MySQL.

Para saber mais, acesse o site:
Outras dicas deste autor
Nenhuma dica encontrada.
Leitura recomendada

Seleção de vídeos: licença Creative Commons, Lula no FISL, Maddog e mais

Montando um servidor de remote desktop com NX Server

Interceptando tráfego SSL/HTTPS com Ettercap e SSLstrip

Target TTL do Iptables: Contornando bloqueios de compartilhamento

Ativar temas do Emerald no Ubuntu

  

Comentários

Nenhum comentário foi encontrado.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts