Acorda pra Web!

Tecnologia que vai mudar nossas vidas, depois do café.

PDO: Bancos de dados no PHP5

  • PDO substitui todas as funções de bancos de dados
  • Não tem PDO no PHP4, tem no PHP5, e só vai ter PDO no PHP6
  • PDO é orientado a objetos
  • PDO é mais rápida do que as demais funções de bancos de dados
  • Você deveria usar PDO
  • Coisas simples são realmente simples no PDO
  • Coisas complexas, são bem mais simples com PDO

É tão fácil…

…Conectar ao banco

PHP
<?php
$banco = new PDO('mysql:host=localhost;dbname=nome_do_banco', 'username','password');
?>

…Pegar um registro baseado em um campo

PHP
<?php
$banco = new PDO('mysql:host=localhost;dbname=nome_do_banco', 'username','password');
$dados_do_cliente = $banco->query('SELECT * FROM clientes WHERE id = 1')->fetch();
?>

…Vários registros de um banco de dados

PHP
<?php
$banco = new PDO('mysql:host=localhost;dbname=nome_do_banco', 'username','password');
$todos_os_clientes = $banco->query('SELECT * FROM clientes')->fetchAll();
?>

…Registros com muitos filtros e condições

PHP
<?php
$banco = new PDO('mysql:host=localhost;dbname=nome_do_banco', 'username','password');
$filtros = array(
'nome'=>'João',
'departamento'=>'TI',
'unidade'=>'Jabaquara',
$consulta = $banco->query('SELECT * FROM clientes WHERE nome = :nome AND departamento = :departamento AND unidade = :unidade')
$clientes_pelo_filtro = $consulta->execute($filtros);
?>

…Incluir dados

PHP
<?php
$banco = new PDO('mysql:host=localhost;dbname=nome_do_banco', 'username','password');
$novo_cliente = array('nome'=>'José','departamento'=>'TI','unidade'=>'Paulista');
$banco->prepare('INSERT INTO clientes (nome,departamento,unidade) VALUES (:nome,:departamento,:unidade)')->execute($novo_cliente);
?>

…Incluir MUITOS dados

PHP
<?php
$banco = new PDO('mysql:host=localhost;dbname=nome_do_banco', 'username','password');
$varios_clientes = array(
0=>array('nome'=>'José','departamento'=>'TI','unidade'=>'Paulista'),
1=>array('nome'=>'Marcos','departamento'=>'Infra','unidade'=>'Jabaquara'),
2=>array('nome'=>'Paulo','departamento'=>'Serviços,'unidade'=>'Bom Retiro')
);
$inserir = $banco->prepare('INSERT INTO clientes (nome,departamento,unidade) VALUES (:nome,:departamento,:unidade)');
foreach ($varios_clientes as $cliente) $inserir->execute($cliente);
?>

…Usar um loop pra iterar sobre os resultados

PHP
<?php
$banco = new PDO('mysql:host=localhost;dbname=nome_do_banco', 'username','password');
foreach ($banco->query('SELECT * FROM clientes') as $cliente) {
print_r($cliente);
}
?>

E tudo isso…

  • Sem sofrer com aquele monte de aspas e strings concatenadas
  • Sem precisar de preocupar com segurança, o PDO faz isso pra você
  • Com a mesma interface pra qualquer banco de dados, muito consistente

Tá esperando o que? Go, PHP5!

30 Respostas para “PDO: Bancos de dados no PHP5”

  1. Diogo diz:

    Sem duvida, muito bom o PDO! Este guia fica nos favoritos como referência!

  2. Hugo diz:

    Qual as vantagens de usar o PDO em relação a classe DB do Pear?

    http://pear.php.net/package/DB

  3. Alexandre diz:

    Hugo, a vantagem é a rapidez e portabilidade. PDO é uma extensão nativa do PHP, escrita em C, portanto muito mais rápida do que qualquer módulo PEAR, e sempre disponível sem que o PEAR tenha que ser instalado.

    O módulo DB do PEAR também está “velho”, foi substituído pelo MDB2, só é útil na verdade para quem precisa de uma aplicação que pode ser instalada em vários bancos de dados diferentes (MySQL e PgSQL por exemplo).

  4. Leonardo L Procópio diz:

    Muito show o post em brother, mas diz ai, e em relação a transação, como seria pra trabalhar com ela?

    grande abraço!

  5. Marcelo diz:

    Gostei muito do nome e da proposta de seu Blog. Parabéns!

    Abs,
    Marcelo

  6. Vilmar Spies diz:

    estou tentando conectar em um banco FIREBIRD através do PDO, mas esta me retornando o seguinte erro qdo tento inserir um registro no mesmo:


    Fatal error: Call to a member function prepare() on a non-object in C:\Instaladores\xampp\htdocs\OrcamentoMicrotek\application\business\dao\UsuarioDAO.php on line 19

    minha conexão:

    $this->con = new PDO("firebird:dbname=C:\\vilmar\\DADOSMICROTEK.FDB", "SYSDBA", "masterkey", array(PDO :: ATTR_PERSISTENT => $this->persistent));

    codigo da inserção

    $stmt = $this->conex->prepare("INSERT INTO usuarios (usu_nome, usu_username, usu_password) VALUES (?, ?, ?)");
    $stmt->bindValue(1, $usuario->nome);
    $stmt->bindValue(2, $usuario->username);
    $stmt->bindValue(3, md5($usuario->password));
    $stmt->execute();

  7. CodeIgniter: framework PHP ágil, robusto e de alta performance | desenvolvimento para web diz:

    [...] querys, manipular resultados de consultas, realizar transações (como se fosse PDO), fazer query caching, dentre [...]

  8. João diz:

    Meu servidor recusa o uso dos dois pontos como os da expressão:

    prepare(‘INSERT INTO clientes (nome,departamento,unidade) VALUES (:nome,:departamento,:unidade)’)->execute($novo_cliente);
    ?>

    O q

  9. Rúbia diz:

    Achei esse post excelente, não conhecia a sigla “PDO”, e estou torcendo para talvez não precisar abandonar o PHP em prol do .Net por causa de questões comerciais!! puxa, gosto tanto do PHP!!

    Já sofri e perdi um tempo razoável validando queries e procurando um erro “invisível” que não permitia que meus dados fossem gravados no banco, acabando por desistir da query e adotar o CodeIgniter como framework que me livrou de todos os meus problemas.

  10. Reginaldo Morikawa diz:

    Estou usando esse PDO para um site que eu estou fazendo, e precisava de um retorno de quantos registros foram lidos na consulta, pois é para um sistema de busca. Se o resultado fosse 0 queria colocar uma mensagem que nada foi encontrada. Estou usando o foreach, como no seu último exemplo. Se puder ajudar agradeço. Sou iniciante em php, mas estou precisando usá-lo nesse projeto.

  11. Eduardo diz:

    e como faço pra executar???

  12. villas diz:

    Muito bom teu artigo

    brigado por partilhar !

  13. villas diz:

    como faz pra executar ??

    execute();

    um exemplo mais simples:

    $conn = new PDO(“mysql:host=localhost; dbname=banco”, “user”, “pass”);

    $stmt = $conn->prepare(“select * from tabela”); // ele prepara uma sintaxe
    $stmt->execute();

    ai faz um laço pra pegar as variáveis.

    Abraço

  14. Ronaldo diz:

    krai a locaweb tem pdo mas eu nao consigo pegar os dados no meu loop fiz tudo certinho no localhost ta funfando perfeito sakka so que na locaweb nao

  15. McJ HD diz:

    Mano, esse tal de pdo é foda mesmo. Valeu pelo artigo resumido, ótimo para quem ta iniciando nessa parada.
    Espero que você faça mais artigos sobre pdo. Só!!!

  16. CodeIgniter: framework PHP ágil, robusto e de alta performance | CodeIgniter Brasil diz:

    [...] databases, executar querys, manipular resultados de consultas, realizar transações (como se fosse PDO), fazer query caching, dentre [...]

  17. wryel diz:

    simples e diretoao ponto! muito bom!

  18. Antonio diz:

    é tudo muito simples tudo muito legal mas cara eu fiz arquivo com fiuções de banco e coloquei as funçoes basicas de banco!blz a função é a seguinte:

    */function pesquisar($pesquisa){
    try {
    $db= NewADOConnection(‘mysql’);
    $result = $db->Connect(‘localhost’, ‘root’, ‘root’, ‘provinha_brasil’);
    $teste= true;
    }
    catch (Exception $e){
    $teste= false;
    }
    if ($teste){
    try{
    $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
    $result = $db->execute($pesquisa);
    $tabela = $result;
    return $result;
    $result = $db->close();
    }
    catch (Exception $e){
    echo (“Erro na Pesquisa”);
    }
    }
    else {
    return false;
    }
    }*/

    estou usado adodb lite ele me retorna o resutt set inteiro ja no pdo ele não retorna. obs : estou mudando para o pedo pélo fato de não ter o driver em adodb lite instalado.mas se o bicho ficar complicado vou ter que recorrer au bom e velho POG que cara esse negocio de fetch e fetch_array()ta foda de engolir!!!!

  19. Utilizando PDO no PHP | diz:

    [...] Fonte: Acordapraweb [...]

  20. John-Henrique diz:

    Ao meu ver, teoricamente este exemplo está incorreto

    query('SELECT * FROM clientes') as $cliente) {
    print_r($cliente);
    }
    ?>

    Isso porque chamando a instância dentro do foreach a cada loop será chamado novamente a consulta. O correto seria deixar a instância fora do foreach.

    query('SELECT * FROM clientes');
    foreach ( $arrObj as $cliente) {
    print_r($cliente);
    }
    ?>

    Tenta fazer um Benchmark disso, sei que a intenção era apenas exemplificar mas…

    Falopa!

  21. Alexandre diz:

    John-Henrique, não está incorreto! Ele não repetirá a consulta. Isso porque a expressão “$db->query()” retorna um objeto iterável, que implementa a interface Traversable do PHP.

  22. Helder diz:

    Ola,

    Quando sairá o PHP 6?

    Grato

  23. Sinval diz:

    Muito obriagado
    estou estudando PHP e foi de grande ajuda
    a sanar uma duvida minha sobre PHP DATA OBJECTS (PDO)
    flw

  24. Fabio Simões diz:

    Ótima explicação, fazia um tempo que queria saber como usar o PDO com o banco de dados e não encontrava nada muito especial

    Sucesso

  25. Josimar diz:

    O PDO é show de bola, já conhecia há um tempo e há pouco tempo estou trabalhando com ele em um projeto grande. só espero que ele suporte os um milhão de usuários esperados hehe

    Quanto a transactions:
    $dbh->beginTransaction();
    $dbh->commit();
    $dbh->rollBack();

  26. Ronny Santana diz:

    Ola, boa noite, muito bom os exemplos, estou a procura de um rowCount que funcione, ate agora não achei.

    Obrigado!

  27. Biblioteca PDO – PHP Data Object diz:

    [...] ACORDA PRA WEB – http://www.acordapraweb.com/pdo-bancos-de-dados-no-php5/ [...]

  28. Biblioteca PDO – PHP Data Object | PHTTP diz:

    [...] ACORDA PRA WEB – http://www.acordapraweb.com/pdo-bancos-de-dados-no-php5/ [...]

  29. Liainyappot diz:

    pozycjonowanie
    Hi, can you translate this web page for me? It appears exciting but i do not know what language is it. Is it russian? I like to go through sites in foreign languages since they are verry appealing but i have no strategy what language is it. Do you know what pozycjonowanie is? I was browsing for any informations about pozycjonowanie and i fount the web page but i can not understeand a solitary phrase. Can any person enable me with this pozycjonowanie site?

  30. Janete diz:

    Hi, Liainyappot, this language is Polish, ok?

    Hugs!

Deixar um Comentário

XHTML: Você pode usar essas tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>