Criando aplicações portáveis entre diferentes SGBDs usando PDO(PHP Data Objects)
Principais funcionalidades do PDO para Sistema Gerenciador de Banco de Dados
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