Na semana passada introduzimos um novo assunto aqui no Escola Criatividade, podemos mostrar mais sobre PHP Orientado a Objetos, uma forma muito mais prática e atualizada de programar, seja em PHP, seja em qualquer outra linguagem. Dando continuidade ao assunto hoje iremos mostrar a programação orientada a objetos de uma forma mais prática, mostrando como criar uma classe de conexão com o banco de dados, isso irá clarear ainda mais o assunto para aqueles que ainda não estão tão acostumados a programar em PHP desta maneira. Veremos que possuindo uma classe deste gênero, o programador terá muito menos trabalho na hora de se conectar a um banco de dados além de ter um código organizado e com fácil manutenção, afinal tudo relacionado ao banco de dados estará nesta classe.

PORQUE SE CONECTAR AO BANCO DE DADOS UTILIZANDO OO?

Como foi falado no artigo que introduziu o assunto de orientação a objetos, podemos perceber que um código utilizando este padrão de programação possui uma manutenção muito mais facilitada, já que teremos um código organizado e bem modularizado. Com banco de dados não é diferente. Quantas vezes um programador não se depara com um projeto em que em todas as páginas o antigo programador faz uma conexão com o banco de dados e a manutenção é  um verdadeiro pesadelo? Utilizando uma classe para isso, você pode centralizar a lógica de conexão com o banco de dados em um só lugar fazendo com que a pessoa que irá realizar a manutenção mais a frente não tenha tanta dificuldade. E esta pessoa pode ser você.

php objetos

MySQL

Para se conectar a um banco de dados precisamos utilizar um. Para este exemplo irei utilizar o MySQL, que é um dos sistemas de gerenciamento de bancos de dados que considero mais fantásticos do mundo, além de ser grátis é um banco de dados que possui todas as características que um bom SGBD precisa. Outro fator de muita importância é o fator que o MySQL ter a conexão com o PHP muito facilitada, pouquíssimas vezes tive problemas com o MySQL, assim como tenho com Oracle ou mesmo o SQL Server. Se ainda não conhecer muito bem este gerenciador de banco de dados, considere visualizar estes artigos:

PRÉ-REQUISITOS

Para que se programe em qualquer linguagem é necessário ter um ambiente totalmente configurado e preparado para receber os programas criados, para que sejam testados e executados. Para que você consiga realizar a conexão com o banco de dados é necessário ter um ambiente Apache + PHP + MySQL preparado, existem diversos pacotes na internet que proporcionam um ambiente totalmente configurado utilizando apenas um instalador, como é o caso do WAMP, XAMPP, na internet também é possível encontrar diversos tutoriais de como instalar estes pacotes ou mesmo realizar a instalação de cada um dos pacotes, separadamente. Também é necessário ter conhecimentos básicos em PHP e sobre o funcionamento de bancos de dados. Aqui mesmo no Escola Criatividade já tivemos artigos que auxiliam neste aspecto e recomendo que faça a leitura dos mesmos para que tenha o conhecimento necessário para tal.

CLASSE DE CONEXÃO AO BANCO DE DADOS

Mostraremos a classe por completo e mais abaixo iremos fazer toda a análise da classe para que não reste nenhuma dúvida da lógica utilizada. Perceba que esta classe é apenas o mais básico necessário para a conexão ao banco de dados e a mesma pode ser customizada para a utilização mais específica.

<?php
/*
* Classe de conexão a banco de dados MySQL Orientado a Objetos
* Autor:  Jair Rebello
*/

class connectBD {

   /*
   * Declaração dos atributos da classe de conexão
   */

   private $host; // Endereço do servidor do banco de dados
   private $bd; // Banco de dados utilizado na conexão
   private $usuario; // Usuário do banco de dados que possua acesso ao schema
   private $senha; // Senha do usuário
   private $sql; // Consulta a ser executada

   function conectar(){
      /*
      * Método que conecta ao banco de dados passando
      * os valores necessários para que a conexão ocorra
      */
      $conexao = mysql_connect($this->host,$this->usuario,$this->senha) or die($this->mensagem(mysql_error()));
      return $conexao;
   }

   function selecionarDB(){
      /*
      * Método que seleciona o banco de dados
	  * com que irá trabalhar
      */

      $banco = mysql_select_db($this->bd) or die($this->mensagem(mysql_error()));
      if($banco){
         return true;
      }else{
         return false;
      }
   }

   function executar(){
      /*
      * Método que executa uma query no banco de dados
      */
      $query = mysql_query($this->sql) or die ($this->mensagem(mysql_error()));
      return $query;
   }

   function set($propriedade,$valor){
      /*
      * Método criado para atribuir os valores as variáveis de conexão,
	  * muito melhor que criar set's para cada variável
      */
      $this->$propriedade = $valor;
   }

   function mensagem($erro){
      /*
      * Função para exibir os possíveis erros
      * Separamos em um método, pois este pode ser estilizado,
	  * sem alterar outros métodos
      */
      echo $erro;
   }
}

?>

Depois de toda a declaração da classe e comentários iniciais, temos da linha 13 até a linha 17, a declaração das variáveis que iremos utilizar na classe, são principalmente variáveis de conexão com o banco de dados MySQL, se um destes valores forem passados de maneira inadequada, certamente a conexão não irá ser possível. Perceba que toda a classe é devidamente comentada, isso ajuda também na manutenção e também no entendimento de quem irá dar manutenção posteriormente.

Na linha 19, podemos encontrar a classe de conecta de fato ao banco de dados, partindo das informações contidas nas variáveis de conexão, o PHP tentará um conexão ao banco de dados, caso isto não seja possível é chamado o método die(). A função die() aborta imediatamente a execução da aplicação, utilizar este método nestas situações é perfeitamente correto, já que não como o sistema funcionar sem uma conexão com o banco de dados, em outros casos de erros menos graves uma estrutura try-catch se mostra mais eficiente já que o programa não precisa ser interrompido totalmente.

Na linha 28, temos a função selecionarDB(), esta função fará a seleção do banco de dados com que se deseja trabalhar neste caso. Muitos não entendem muito bem porque é necessário se conectar ao banco de dados e depois ainda temos que selecionar o “banco” que queremos utilizar. Isto acontece porque quando nos conectamos a um SGBD com uma combinação de usuário e senha, possuímos permissão a um ou mais schemas (bancos), e temos que selecionar o qual desejamos trabalhar e realizar nossas consultas. A função retorna true (verdadeiro), caso  o retorna seja um objeto de banco de dados válido e false (falso) se algo der errado com a execução. Mais uma vez é utilizado o método die(), pelos mesmos motivos citados acima.

A função executar() é mostrada na linha 42, esta função basicamente realizar consultas ao banco de dados, tendo uma string SQL como parâmetro. Lembrando que o conceito de consulta em banco de dados nem sempre está relacionado a uma consulta (resgate de dados já cadastrados), uma consulta pode também ser uma inserção de dados ou mesmo a atualização de dados cadastrados anteriormente.

A função set() é utilizada para atribuir os valores as variáveis utilizadas na classe. Isso evita que precisemos incluir um set para cada variável já que passamos também por parâmetro na função a propriedade que queremos alterar. Precisamos de métodos para alterar o valor destas variáveis porque determinamos que as mesmas seriam do tipo private.

UTILIZANDO NA PRÁTICA A CLASSE

Para demonstrar o funcionamento da classe proposta neste artigo, criamos um novo arquivo PHP, podendo ser index.php, dentro da mesma pasta da classe criada.  A primeira coisa a ser feita é realizar a inclusão do arquivo que contem a nossa classe. Depois criamos uma instância da classe connectBD. Nas cinco linhas seguintes são feitas as atribuições das variáveis necessárias para realizar a conexão ao banco de dados. Nas linhas 11 e 12 são efetuadas os métodos para se conectar ao banco de dados e depois feita a seleção do banco de dados. Ao fim é feita uma pequena impressão para mostrar que realmente a conexão com o banco de dados foi bem sucedida.

<?php
    include('connectBD.php');
    $connect = new connectBD();

    $connect->set('bd','information_schema');
    $connect->set('host','localhost');
    $connect->set('usuario','root');
    $connect->set('senha','');
    $connect->set('sql','SELECT * FROM SCHEMATA S');

    $connect->conectar();
    $connect->selecionarDB();

    echo 'Foram encontrados: ' . mysql_num_rows($connect->executar()) . ' Schemas em seu banco de dados';
?>

CONCLUSÃO

Neste artigo aprendemos a criar uma classe de conexão e execução de consultas no banco de dados totalmente orientado a objetos, para isto utilizamos o MySQL como exemplo mas o exemplo pode ser estendido aos demais bancos dados que o PHP possui suporte. Também criamos um programa PHP para testar o funcionamento da classe e se você tiver realizado todas as codificações corretamente terá sucesso e o mesmo exibirá a quantidade de bancos de dados existentes na sua instalação do MySQL. Nos próximos artigos iremos abordar muito mais aspectos relativos a utilização do PHP orientado a objetos. Também mostraremos alguns frameworks que utilizam orientação a objetos e que facilitam e muito o desenvolvimento ágil, fique no aguardo.

Abraços!

 

Autor: Jair Rebello

Blog do Autor | Artigos do Autor:

Analista de Sistemas, empreendedor e blogueiro que dedica parte de seu tempo para a partilha de material de grande qualidade relacionados a Wordpress, SEO, Tableless, JQuery, PHP, Android e outras tecnologias mais. Pode me encontrar no Escola Sites ou O Android.

  • Explorer - Factory Construction & Ship Building Joomla Theme
  • Justice - Attorney and Law Firm Joomla Template
  • OwnFolio - One Page Personal Portfolio / vCard / Resume / Showcase Joomla Template
  • Big Business - Responsive Template
  • Merab - Creative Multipurpose Drupal 8 Theme
  • Fitness Academy Joomla Template
  • Fruition - Business Joomla Template
  • Educate | Education & Courses, Kindergartens Joomla Template
  • Constructive - Contractors Multipurpose Joomla Landing Page Theme
  • Vina Bubox - VirtueMart Joomla Template for Online Stores
  • BizOne - One Page Parallax Drupal Theme
  • LawHouse - Responsive Lawyers Attorneys Joomla Template

Gostou deste artigo? Então torne-se fã do Blog no Facebook!



Comentários dos Alunos


  1. Carlos Samuel
    26 de novembro de 2012

    Boas,

    penso que o código tem uma gralha na ultima linha sendo que propriedada deveria ser propriedade.

    function set($propriedade,$valor){
    /*
    * Método criado para atribuir os valores as variáveis de conexão,
    * muito melhor que criar set’s para cada variável
    */
    $this-> //$propriedad(a)/e //= $valor;
    }

    Obrigado.



    • Jair Rebello
      26 de novembro de 2012

      Carlos, obrigado pela observação havia solucionado em meu computador e não atualizei no artigo.

      Grato.



  2. Não entendi pois depois que criou toda a classe connectaDB.php, no arquivo index.php reescreveu um monte de comandos atribuindo valores às variáveis que estão dentro da classe.

    Qual a vantagem? Qual a diferença em fazer um require do arquivo conecta.php em quantos arquivos precisar ?

    Vinícius.



    • elton
      10 de junho de 2015

      A vantagem, é que você não ira precisar montar um monte de códigos toda vez que quiser executar uma consulta sql.

      basta utilizar esta class para varias consultas, e econimizar codigos e linhas de comando.



  3. (repeti pois não marquei avisar por email no anterior)

    Não entendi pois depois que criou toda a classe connectaDB.php, no arquivo index.php reescreveu um monte de comandos atribuindo valores às variáveis que estão dentro da classe.

    Qual a vantagem? Qual a diferença em fazer um require do arquivo conecta.php em quantos arquivos precisar ?

    Vinícius.



  4. Denis Leandro Santana e Silva
    18 de dezembro de 2014

    Concordo com o vinícius.



  5. Miguel
    11 de junho de 2015

    A meu ver era melhor com as seguintes alterações
    ============================================================
    #connectDB.php
    ============================================================
    class connectDB[

    private $host=”localhost”;
    private $bd=”information_schema”;
    private $usuario=”root”;
    private $senha=”";

    function _construct(){
    $con = mysqli_connect($this->host,$this->db,$this->usuario, $this->senha);
    if(mysqli_connect_error) die(“Erro ao ligar á base de dados”);
    else $this->connection = $con;
    }
    function exec_query($sql){
    $query = $this->connection ->query();
    return $query;
    }

    }

    ============================================================
    #index.php
    ============================================================
    autoloader para o connectBD…

    use class/connectDB as conexao;
    $con = new conexao;

    $query_s = $con -> exec_query($query);

    if(mysqli_num_rows($query_s){

    }

    /*—————————————————-*/
    Algo assim já funciona com muito menos código necessário em cada pedido á base de dados.
    Eu proprio uso um sistema muito parecido, nao o ponho aqui que é um pouco extenso e ainda não está preparado para todas os tipos de querys, mas a chamada por exemplo é

    $que_params = array(); #condições WHERE
    $que_setts = array(); #condições Query

    $que_params['username']['valor'] = “exemplo”;
    $que_params['nome_coluna']['condiçao']=”=”;

    $que_setts['ORDER_BY']['coluna'] = “signup”;
    $que_setts['ORDER_BY']['sentido'] = “DESC”;

    $que = $con->simple_query_(“select”, “tabela”, $que_params, $que_setts);

    Isso resultará numa query do tipo
    SELECT * FROM tabela WHERE `username`=’exemplo’ ORDER BY signup DESC

    Para prevenção de erros executo a query na propria função da classe, onde retorna um array

    $que['error'] #algum erro foi encontrado, nao vale a pena prosseguir
    $que['rows'] #foram encontradas linhas?
    $que['final_array'] #Passo o objecto da ligação, ai so fazer o fetch depois da chamada da query

    PS:normal que exista algum erro aqui pois escrevi o codigo directamente nos comentários!


RSS
Twitter
Facebook
Comentários
ASSINANTES
SEGUIDORES
FÃS
COMENTÁRIOS
7794

Subscrever Newsletter
Subscreva a Newsletter:



Aplicativos Android, iPhone e Muito Mais!




Assine a Escola Criatividade Assine a Newsletter da Escola Criatividade Escola Criatividade no Twitter Escola Criatividade no Facebook Escola Criatividade no Youtube Escola Criatividade no Google Buzz