Tableless

Busca Menu

Criando aplicações portáveis entre diferentes SGBDs usando PDO(PHP Data Objects)

Seja o primeiro a comentar por

Quero apresentar nesse artigo as principais funcionalidades do PDO. PDO é uma biblioteca que implementa abstração ao acesso dos dados, ou seja, ela utiliza um driver específico, para cada SGBD (Sistema Gerenciador de Banco de Dados), tornando possível a portabilidade da base de dados de sua aplicação, sem que a mesma sofra danos ou que você passe horas e horas reescrevendo linhas e mais linhas de código.

O primeiro passo é habilitar o driver do PDO no php.ini retirando o “;” da sua frente;

No Windows:

extension=php_pdo.dll
extension=php_pdo_mysql.dll

No Linux:

extension=pdo.so
extension=pdo_mysql.so

Consideremos o seguinte banco de dados:

create database livraria;
use livraria;
create table livros(
id int not null auto_increment,
titulo varchar(75) not null,
preco decimal(10,2) not null,
estoque int not null,
PRIMARY KEY (id));

Estabelecemos a conexão com o Banco de dados no nosso arquivo connect.php

//Local do banco
$host = "localhost";
//Nome do banco de dados
$db = "livraria";
//Seu Usuário no banco de dados
$user = "root";
//Senha do banco de dados
$pass = "";
//Estabelecendo a conexão
try
{
  /**
   *Agora o pulo do gato,aqui é onde a mágica acontece, precisamos especificar o banco de dados 
que iremos trabalhar,no nosso caso, optei pelo mysql. Em seguida especificamos o local 
e o nome do banco de dados e por último o usuário e a senha
    */
    $pdo = new PDO("mysql:host=$host;dbname=$db", $user, $pass);
}
catch (Exception $e)
{
    echo "Erro ao estabelecer conexão com o banco de dados:".$e->getMessage();
    die;
}

Para inserir no Banco de dados criamos o arquivo insert.php.

/**
 * Insere conexão com o banco de dados estabelecida anteriormente 
 */
include 'connect.php';
/**
 * Variáveis que podem receber os valores do seu formulário
 */
 $titulo = "Padrões de Projeto - PHP";
 $preco = 140.5;
 $estoque = 5;

try 
{   /**
    *Aqui preparamos primeiramente nossa instrução de inserção e como valores, 
passamos as "?"(interrogações) para referencia-las com o parâmetro passado pela função bindParam. 
    * */
    $sql="INSERT INTO `livros` (`titulo`, `preco`, `estoque`) VALUES (?, ?, ?)";
    $stmt = $pdo->prepare($sql);
    $stmt->bindParam(1,$titulo);
    $stmt->bindParam(2,$preco);
    $stmt->bindParam(3,$estoque);
    
    if($stmt->execute())
        echo "Gravado com Sucesso";
    else
        throw new Exception("Erro ao gravar informação");

}
catch (Exception $e) 
{
    echo $e->getMessage();   
}

Para atualizar os arquivos no banco de dados utilizamos nosso arquivo update.php:

/**
*   Inclusão da minha Conexão
* */
include 'connect.php';
/**
 * Variáveis que vem do seu formulário html  
 */
$titulo = "Padrões de Projeto - PHP";
$preco = 60;
$estoque = 5;
try 
{   
       /**
    *Aqui preparamos nossa instrução de atualização dos dados  
    * */
    $sql="UPDATE `livros` SET `preco` = ?, `estoque`= ? WHERE `titulo` = ?";
    $stmt = $pdo->prepare($sql);
    $stmt->bindParam(1,$preco);
    $stmt->bindParam(2,$estoque);
    $stmt->bindParam(3,$titulo);

    if($stmt->execute())
        echo "Atualizado com Sucesso";
    else
        throw new Exception('Erro ao Atualizar');

} 
catch (Exception $e) 
{
    echo $e->getMessage();   
}

Para listar os dados no list.php:

   include 'conect.php';
   //listando os livros
   $sql = "SELECT * FROM livros";
   $dados = $pdo->query($sql);
/**
*fetch()->Retorna a próxima linha do resultado.
*fetchAll()-> Retorna um array com todos os resultados.
*fetchObject()-> Retorna a próxima linha do resultado como objeto.
*fetchColumn()-> Retorna uma coluna da próxima linha do resultado.
**/
while ($result = $dados->fetch())
{   
 echo $result['titulo'] . " - ". $result['preco']. "-". $result['estoque']."
";
}

E para deletar os arquivos criamos o delete.php:

/**
 *  Inclusão da minha Conexão
 **/
include 'conect.php';
/**
 * Variáveis que vem do seu formulário html  
 */
$titulo = "Padrões de Projeto - PHP";
$preco = 60;
$estoque = 5;

try 
{   
    /**
    * Aqui preparamos nossa instrução de exclusão dos dados.  
    **/
      $sql="DELETE FROM `livros` WHERE `titulo` = ?";
    $stmt = $pdo->prepare($sql);
    $stmt->bindParam(1,$titulo);

    if($stmt->execute())
        echo "Deletado com Sucesso";
    else
        throw new Exception('Erro ao Deletar');

} 
catch (Exception $e) 
{
    echo $e->getMessage();   
}

Métodos da classe PDO:

exec int Utilizado para insert, update e delete
query PDOStatement Utilizado para resultados tabulares, comando select.
prepare PDOStatement Cria um prepared statement, utilizado para dados variáveis.

Trabalhar com PDO tem várias vantagens, além da portabilidade, existe também a questão da segurança, mas isso é cena para os próximos capítulos. Aconselho que visitem a documentação para que possam ter acesso a informação completa da biblioteca, pois a mesma é muito rica e fornecerá ao desenvolvedor inúmeras vantagens que facilitarão no dia a dia do seu desenvolvimento. Obrigado ^^!

clique aqui para baixar o código completo.

Referências

http://www.diogomatheus.com.br/blog/php/trabalhando-com-pdo-no-php/
http://php.net/manual/en/book.pdo.php
http://www.php.net/manual/en/pdo.drivers.php

Publicado no dia