Tutorial PDO (PHP Data Object)

0

Publicado em : 06/12/2011 | Por : Rafael Wendel Pinheiro | Em : banco de dados, classes, mysql, php, sql, tutorial
  • Tags: ,
  • PDO (PHP Data Object) é um módulo nativo desenvolvido a partir do PHP 5 que tem como objetivo fornecer uma estrutura que facilita a integração de aplicações desenvolvidas sob o paradigma de orientação à objetos com bancos de dados relacionais de forma fácil e sem a necessidade de alterar a padronização do sistema.

    Com o PDO é possível desenvolver aplicações mais seguras a nível de banco de dados. Dentre as funcionalidades que ele nos oferece podemos destacar o controle de transações e o uso de prepared statements.

    Para ativar o módulo PDO no seu php basta ir ao arquivo de configuração php.ini, localizar as linhas php_pdo.dll e php_pdo_mysql.dll  e descomentá-las (retirar o ponto e viírgula “;” do início da linha ) . Nesse caso estaríamos aptos a utilizar PDO com MySQL. Se você utiliza outro SGBD, basta descomentar a linha referente à ele. Feito isso reinicie o seu servidor de aplicações.

    Conexão com o banco de dados utilizando PDO

    Bom. Veremos agora como utilizar o PDO, conectar com bancos de dados, executar querys e etc.

    Veja como se conectar com um banco de dados via PDO:

    1
    2
    3
    4
    5
    
    <?php
       $pdo = new PDO("mysql:host=localhost;dbname=nome_banco", "root", "sua_senha");
       if(!$pdo){
           die('Erro ao criar a conexão');
       }

    Tarefa simples. Basta informar o sgbd que será utilizado (mysql, mssql, pgsql, firebird, etc), o host, o nome do banco de dados, o usuário e a senha.

    Já na conexão com o banco de dados já temos a nossa primeira vantagem com relação à utlização de PDO. Se a aplicação estiver com umas 20 tabelas e umas 200 queryes de manipulação e recuperação de dados  e for necessário mudar de SGBD por qualquer motivo, basta alterar os parâmetros de conexão e pronto!!! Sem a utilização de PDO talvez fosse necessário sair procurando todos os mysql_query e alterar por pg_query  ou msql_query.

    Executar querys no banco de dados

    Vamos a um exemplo agora de como executar querys via PDO no nosso banco de dados.

    Primeiro uma query de inserção de dados.

    6
    7
    8
    9
    10
    11
    12
    
       $executa = $pdo->query("INSERT INTO cliente(idcliente, nome) VALUES ('1', 'Rafael')");
       if($executa){
          echo 'Dados inseridos com sucesso!';
       }
       else{
          print_r($pdo->errorInfo());
       }

    Agora um select:

    15
    16
    17
    18
    19
    20
    21
    22
    23
    
       $rs = $pdo->query("SELECT idcliente, nome FROM cliente")->fetchAll();
       if(!$rs){
          print_r($pdo->errorInfo());
       }
     
       foreach ($rs as $reg){
          echo 'Código: ' . $reg['idcliente'] . '<br />';
          echo 'Nome: ' . $reg['nome'] . '<br /><br />';
       }

    Nesse exemplo ele me retorna em forma de array todos os resultados gerados pela consulta. Com isto basta percorrer o array e exibir as informações.

    Utilizar prepared statements e bind params

    Prepared Statemens são consultas pré-preparadas onde dividimos em partes a inserção do código SQL a ser executado e os valores a serem utilizados (bind params). Com os prepareds statements utilizamos na query os marcadores de lugar e depois informamos quais serão os valores que deverão ser utilizados em cada um dos lugares. Isso fornece mais segurança ao nosso banco de dados e nos previne de ações maliciosas como o SQL Injection.

    Temos duas formas de utilizar essa técnica. Primeiro através dos pontos de interrogação ou então através de pseudo-nomes que funcionam como variáveis.

    Veja:

    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    
       $idcliente = 100;
       $nome = "Rafael Wendel Pinheiro";
       try{
           $stmte = $pdo->prepare("INSERT INTO cliente(idcliente, nome) VALUES (?, ?)");
           $stmte->bindParam(1, $idcliente , PDO::PARAM_INT);
           $stmte->bindParam(2, $nome , PDO::PARAM_STR);
           $executa = $stmte->execute();
     
           if($executa){
               echo 'Dados inseridos com sucesso';
           }
           else{
               echo 'Erro ao inserir os dados';
           }
       }
       catch(PDOException $e){
          echo $e->getMessage();
       }

    Preparamos a query e substituimos os valores pelo ponto de interrogação (?). Depois, obedecendo a ordem dos pontos, colocamos cada valor e o tipo de dado daquele atributo.

    A outra forma:

    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    
       $idcliente = 100;
       $nome = "Rafael Wendel Pinheiro";
       try{
           $stmte = $pdo->prepare("INSERT INTO cliente(idcliente, nome) VALUES (:idcliente, :nome)");
           $stmte->bindParam(":idcliente", $idcliente , PDO::PARAM_INT);
           $stmte->bindParam(":nome", $nome , PDO::PARAM_STR);
           $executa = $stmte->execute();
     
           if($executa){
               echo 'Dados inseridos com sucesso';
           }
           else{
               echo 'Erro ao inserir os dados';
           }
       }
       catch(PDOException $e){
          echo $e->getMessage();
       }

    Nesse caso informamos o nome do parâmetro que utilizamos na query e também o valor e tipo de dado que ele deve receber.

    Para finalizar vamos ver um exemplo onde o resultado da nossa query nos retorna os obejtos de cada resultado da consulta SQL (seria o equivalente ao mysql_fetch_object).

    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    
       $nome = "Rafael Wendel Pinheiro";
       try{
           $stmte = $pdo->prepare("SELECT idcliente, nome FROM cliente WHERE nome = ?");
           $stmte->bindParam(1, $nome , PDO::PARAM_STR);
           $executa = $stmte->execute();
     
           if($executa){
               while($reg = $stmte->fetch(PDO::FETCH_OBJ)){ /* Para recuperar um ARRAY utilize PDO::FETCH_ASSOC */
                    echo 'Código: ' . $reg->idcliente . '<br />';
                    echo 'Nome: ' . $reg->nome . '<br /><br />';
               }
           }
           else{
               echo 'Erro ao inserir os dados';
           }
       }
       catch(PDOException $e){
          echo $e->getMessage();
       }

    E é isso. Em breve escreverei um post mostrando como utilizar o controle de transações com PDO.

    Qualquer dúvida utilize a caixa de comentários.

    Abs

    Siga-me no twitter: @rafaelwendel

    Nenhum post relacionado

    Rafael Wendel Pinheiro

    facebooktwittergoogle plus

    É formado em Sistemas de Informação e pós-graduado em Sistemas de Banco de Dados. Trabalha com o desenvolvimento de sites, sistemas e outras soluções web.


    Deixe um comentário