Olá pessoal!!!!

Hoje o assunto será a conexão  PDO (PHP Data Objects), vamos ver como efetuar consultas SQL (select) utilizando esta biblioteca.

 

 

  • Conectando ao banco de dados

 

Iniciando nosso exemplo, vamos instanciar o objeto PDO contendo as informações de conexão com o banco de dados.

Sempre é bom efetuar um tratamento de erros, evitando assim aquelas mensagens inconvenientes no meio do sistema.

 

<?php

    try
    {
    
        // Instancia do objeto PDO
    
        $tipo_banco = "mysql";
        $host       = "localhost";
        $db_name    = "nome do banco";
        $user       = "usuário";
        $pass       = "senha";
    
        $pdo = new PDO($tipo_banco.':host='.$host.';dbname='.$db_name, $user , $pass);
        
        // define para que o PDO lance exceções caso ocorra erros
        
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    }
    catch(PDOException $e)
    {
    
        // Caso ocorra uma exceção, exibe na tela
        echo $e->getMessage();
    
    }

?>

 

  • Executando a pesquisa no PDO

 

A forma mais simples de ser executada uma consulta seria utilizando o método query, onde o código sql é executado diretamente:

<?php
    // executa a instrução SQL diretamente
    $consulta = $pdo->query("SELECT nome, usuario FROM login");
?>

Mas para efetuar uma pesquisa utilizando toda segurança do PDO, deixaremos de utilizar a “query” e passamos a utilizar o “prepare”, a “query” é muito útil para consultas que não recebam parâmetros, pois a mesma não faz tratamento contra SQL Injection, já com o “prepare” passamos a não ter mais esta dor de cabeça.
Basicamente existem duas formas de se trabalhar com o método “prepare”, usando  parâmetros nomeados e através de parâmetros numéricos, vamos ver as duas formas a seguir:

 

Utilizando parâmetro nomeado:

 

<?php
    
    $consulta = $pdo->prepare("SELECT nome, senha FROM login where usuario = :usuario;");
    
    $consulta->bindParam(':usuario', $_GET['usuario'], PDO::PARAM_STR);
    
    $consulta->execute();
    
    $linha = $consulta->fetch(PDO::FETCH_ASSOC);

?>

Lembrando, caso utilize o “bindParam” sempre deve ser passado uma variável no segundo parâmetro, caso contrário terá uma mensagem de erro muito parecido com esta “Fatal error: Cannot pass parameter 2 by reference in”.

Caso deseje passar algum valor diretamente sem a necessidade de criar uma variável utilize “bindValue”, no exemplo abaixo estarei mostrando a possibilidade de passar um parâmetro inteiro juntamente com o “bindValue”.

 

<?php

    $consulta = $pdo->prepare("SELECT nome, senha FROM login where id_login = :id;");
    
    $consulta->bindValue(':id', 1, PDO::PARAM_INT);
    
    $consulta->execute();
    
    $linha = $consulta->fetch(PDO::FETCH_ASSOC);

?>

Lembrando também, que ao utilizar o “bindParam” ou “bindValue” o PDO não se comunica com o banco de dados para saber qual o tipo de dado deve ser utilizado, sendo assim,  no terceiro parâmetro, por padrão sempre será utilizado o “PDO::PARAM_STR” caso não tenha sido informado.

Ainda existe um quarto parâmetro que  é a quantidade de caracteres a serem utilizados, caso o texto informado seja maior que o permitido informado, será enviado para o banco somente parte ou a quantidade permitida, evitando assim, um possível erro no banco de dados. Este parâmetro é pouco utilizado ao fazer um insert ou update, em select praticamente não se usa.

Além dos parâmetros nomeados podemos passar os dados através de parâmetros numéricos substituindo os “?” da consulta SQL, que são os pontos chave.

 

Utilizando parâmetro numéricos:

 

<?php
    
    $consulta = $pdo->prepare("SELECT nome, senha FROM login where usuario = ? AND id = ?");
    
    $consulta->bindParam(1, $_GET['usuario'], PDO::PARAM_STR);
    $consulta->bindParam(2, $_GET['id'], PDO::PARAM_INT);
    
    $consulta->execute();
    
    $linha = $consulta->fetch(PDO::FETCH_ASSOC);

?>

Podemos passar todos os valores através de um array seja com parâmetros nomeados ou numéricos.

 

<?php

    $dados = array('pedro', 'João');
    
    $consulta = $pdo->prepare("SELECT nome, senha FROM login where usuario = ? or nome = ?");
    
    $consulta->execute($dados);
    
    $linha = $consulta->fetchAll(PDO::FETCH_ASSOC);
    
    
    
    // ou
    
    
    
    $dados = array(':usuario' => 'pedro', ':nome' => 'João');
    
    $consulta = $pdo->prepare("SELECT nome, senha FROM login where usuario = :usuario or nome = :nome;");
    
    $consulta->execute($dados);
    
    $linha = $consulta->fetchAll(PDO::FETCH_ASSOC);

?>

Outra grande vantagem de utilizar o prepare é a possibilidade de definirmos a consulta SQL e poder utilizá-la quantas vezes for necessária tendo a possibilidade de mudar seus parâmetros.

 

<?php

    $consulta = $pdo->prepare("SELECT nome, senha FROM login where usuario = ?");
    
    
    
    // primeira consulta
    
    $consulta->execute(array('pedro'));
    
    $linha = $consulta->fetch(PDO::FETCH_ASSOC);
    
    
    
    // segunda consulta
    
    $consulta->execute(array('joao'));
    
    $linha = $consulta->fetch(PDO::FETCH_ASSOC);

?>
  • Recebendo os dados da pesquisa

 


Para obter os dados pode ser utilizado um while percorrendo assim cada linha retornada do banco de dados:

 

<?php

    while ($linha = $consulta->fetch(PDO::FETCH_ASSOC))
    {
    
        // aqui eu mostro os valores de minha consulta
    
        echo "Nome: {$linha['nome']} - Usuário: {$linha['usuario']}<br />";
    
    }
?>

Tendo como resultado as seguintes linhas:

Nome: Marcos – Usuário: marcos

Nome: Pedro – Usuário: pedro

Nome: João – Usuário: joao

Caso deseje pegar somente a primeira linha de sua consulta pode ser utilizado o fatch():

 

<?php
    
    $linha = $consulta->fetch(PDO::FETCH_ASSOC);
    
    print_r($linha);

?>

Array([nome] => Marcos [usuario] => marcos)

Existe também a possibilidade de retornar todas as linhas da consulta utilizando o fatchAll():

 

<?php

    $linha = $consulta->fetchAll(PDO::FETCH_ASSOC);
    
    print_r($linha);

?>

Array(

  [0] => Array([nome] => Marcos [usuario] => marcos)

  [1] => Array([nome] => Pedro [usuario] => pedro)

  [2] => Array([nome] => João [usuario] => joao)

)

E por fim, podemos receber a resposta da query em forma de objeto utilizando como parâmetro “PDO::FETCH_OBJ” como mostro no exemplo abaixo:

<?php
    while($linha = $consulta->fetch(PDO::FETCH_OBJ)) 
    {
        echo $linha->id. ' - '. $linha->nome . ' - ' . $linha->usuario . '.<br/>';
    }
?>

Tendo como resultado as seguintes linhas:

1 – Marcos – marcos

2 – Pedro – pedro

3 – João – joao

 

Assim finalizamos o básico do  select utilizando a PDO, comente aí caso eu tenha esquecido de algo ou se você estiver com dúvidas, ficarei feliz em respondê-lo.
Clique no link ao lado para baixar o conteúdo completo do post: 

 

autor: Ricardo de Oliveira – ricardo.reksystem@gmail.com

Deixe uma resposta