PDO(PHP Data Objects): o que é, como funciona e como usar?

Quanto mais a tecnologia evolui no mercado moderno, mais os dados estão se tornando um recurso valioso para as empresas e, consequentemente, profissionais da tecnologia precisam aprender a lidar com eles. Saiba que é nesse ponto que reside a importância do PDO — ou PHP Data Objects.

Apesar de ser uma API do PHP de fácil instalação, por intermédio de um gerenciador de dependências, como o Composer, lidar com tantos tipos de dados e bancos relacionais pode ser algo bem distante de simplificado — principalmente, para as pessoas programadoras iniciantes na área.

Se você está nesse grupo, não se preocupe, pois chegou ao lugar certo! Neste guia, abordaremos os principais pontos de atenção para implementação do PDO PHP em suas aplicações, assim como passaremos por cada possibilidade desse recurso. Ao final, você saberá como o PDO funciona, quais são os recursos implementáveis por meio dessa API e como utilizá-la na prática, com exemplos simples e que ajudarão no seu entendimento.

Veremos, no decorrer do nosso texto, os seguintes tópicos:

Prepare-se e vamos lá!

O que é o PDO (PHP Data Objects)?

O PHP Data Objects é uma extensão que permite ao PHP se comunicar com diversos tipos de bancos de dados. O recurso fornece um meio abstrato para acesso às informações disponibilizadas pelos bancos, sendo os seus métodos independentes para cada um dos tipos suportados. O PDO é orientado a objetos.

Como o PDO funciona?

O PDO tem várias funcionalidades que possibilitam às pessoas desenvolvedoras trabalhar com bancos de dados relacionais em suas aplicações. A seguir, você confere as principais funções do PDO PHP, confira.

Prevenção de SQL Injection 

SQL Injection é uma prática maliciosa usada em sistemas PHP, a qual consiste na injeção de códigos na tentativa de invadir a aplicação. A API do PDO fornece alguns mecanismos para prevenir ataques de SQL Injection. Eles variam de acordo com o driver usado, mas a API do PDO fornece uma interface consistente para boa parte dos drivers disponíveis.

Tratamento de transações

A API do PDO suporta transações desde a versão 3.0. Elas são úteis para garantir que um conjunto de operações em determinado banco de dados sejam concluídas como um todo, ou seja, todas as operações devem ser concluídas com sucesso para que a transação seja considerada bem-sucedida pelo sistema ou aplicação. Se uma delas for interrompida, todas as outras são revertidas para o estado inicial.

Parametrização das queries

Isso significa que podemos criar uma query com parâmetros genéricos e, depois, substituir os parâmetros pelos valores reais quando for executá-la. Isso é importante porque a parametrização de queries evita que ataques de injeção SQL ocorram em sua aplicação, por exemplo, pois os valores reais dos parâmetros são enviados para o banco de dados separadamente da query. 

Caso você queira saber mais sobre esse tema, sugerimos acessar nosso post sobre o que é e como usar os principais comandos básicos SQL.

Prepared Statements e Stored Procedures 

O PDO suporta “prepared statements” (comandos SQL pré-compilados) e “stored procedures” (procedimentos armazenados no banco de dados). Os “prepared statements” são úteis porque permitem a você criar comandos SQL de forma genérica e os executar várias vezes, substituindo os parâmetros reais pelos valores específicos da execução. 

Por sua vez, os “stored procedures” servem para quando você precisa executar uma query complexa em várias partes para, por exemplo, paginá-la.

Tratamentos de exceção

Os tratamentos de exceção do PDO PHP permitem que você lide com erros e evite que seu programa pare de funcionar. Você pode usar os tratamentos de exceção para exibir mensagens de erro personalizadas, registrar os erros em um log ou executar outras ações.

Lembrando que é necessário um driver específico para cada banco de dados que pretendemos usar em nossas aplicações para utilizar esses recursos. O PHP vem com diversos drivers PDO pré-compilados para alguns bancos de dados, mas você pode encontrar uma lista completa na seção do manual sobre drivers PDO.

Se o seu banco de dados não estiver listado lá, você precisará compilar um driver PDO específico para ele, antes de poder usá-lo com o PHP.

Quais são os bancos de dados usados pelo PDO?

Atualmente, são suportados pelo PDO os seguintes bancos de dados: 

  • MySQL;
  • PostgreSQL;
  • SQLite;
  • Microsoft SQL Server;
  • Oracle.

Teoricamente, você pode mudar de banco de dados sem ter que reescrever todas as linhas do seu código fonte. Isso acontece porque, com a utilização do PDO, é possível usar várias fontes de dados dentro da mesma aplicação, já que os bancos de dados SQL são padronizados.

O problema, na prática, é que muitos dos bancos de dados utilizados precisarão de configurações específicas para operar corretamente em sua própria plataforma. Por isso, é bom ter bastante atenção a esse quesito quando precisar implementar uma modificação dessas em sua aplicação desenvolvida em PHP.

Quais são os tipos de dados usados pelo PDO?

O PDO suporta vários tipos de dados. Significa que você pode trabalhar com diversos tipos de informação em seus bancos de dados relacionais. Esses dados são:

  • INT: números inteiros, como 1, 2, 3 etc.;
  • CHAR, VARCHAR e Text: strings de tamanho fixo ou dinâmico (em que você especifica a quantidade máxima em caracteres);
  • Booleano: valores TRUE ou FALSE;
  • Float: valores de ponto flutuante, como 0.2 ou 3.141592654;
  • DATE e Date Time: um objeto “PHP Date” representa uma data e um horário sem fuso horário (conceito de GMT);
  • Timestamp: um inteiro que representa um instante preciso no tempo, como um número de segundos desde 1º de janeiro de 1970;
  • Blob: strings binárias (imagens e outros arquivos comprimidos);
  • Longblob: strings binárias que têm o tamanho maior do que 16 MB;
  • Arrays: arrays PHP serializados para formato SQL existente.

O tipo Longblob é um pouco diferente dos demais: ele faz parte do padrão MySQL, e não do standard SQL. Portanto, é bom já ficar sabendo que nem todos os bancos de dados suportam esse tipo.

O MySQL permite que você crie colunas Longblob com um tamanho máximo de 4 GB, mas a maioria dos bancos de dados relacionais limita esse tamanho a um valor menor, geralmente, entre 16 MB e 2 GB.

Outros tipos de dados do SQL que o PDO não suporta são os de tipo decimal (um número de pontos fixos, como 33.67), o de tipo BIGINT (números inteiros muito grandes), e tipo ENUM (lista de valores pré-definidos).

O que é o Composer?

Composer é um gerenciador de dependências do PHP. Permite que os usuários declarem as bibliotecas necessárias para seus projetos e gerencie a instalação dessas mesmas bibliotecas.

O PHP data Objects (PDO) é uma biblioteca presente no Composer e que possibilita acessar vários tipos de banco de dados usando um único conjunto de funções.

Como baixar e instalar o Composer? Confira um passo a passo!

1. Abra o terminal que você utiliza o PHP e rode o seguinte comando: 

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" 

2. Para instalar o Composer globalmente na sua máquina, você pode escolher utilizar o comando a seguir (como administrador):

php composer-setup.php --install-dir=/usr/local/bin --filename=composer 

3. Agora, basta checar a versão instalada, digitando no terminal:

composer --version 

Assim, você poderá confirmar se deu tudo certo com a instalação! Se aparecer algum erro, você precisa começar do primeiro passo — e se o problema persistir, reinstale o seu PHP.

Como usar o PDO PHP na prática? Passo a passo com exemplos!

Antes de começar a usar o PDO em seus projetos PHP, precisamos, primeiro, habilitar o driver do PDO, além do driver referente ao banco de dados escolhido para a aplicação. Para habilitar o PDO, é relativamente simples:

  1. vá até o arquivo php.ini (no mesmo diretório em que o PHP está instalado);
  2. remova os comentários que podem ser encontrados nas linhas indicadas abaixo, para os casos em que você utilizará, por exemplo, o MySQL:
extension=php_pdo.dll
extension=php_pdo_mysql.dll

Para a criação de um novo banco de dados, executamos o comando no terminal em que utilizamos o PHP:

create database nome_banco_teste

Conectando nosso sistema a um banco MySQL usando PDO

Para testar a a conexão entre nosso código e o banco de dados, fazemos da seguinte maneira:

<?php
  $bancodb = new PDO('mysql:host=localhost;db=nome_do_banco', 'username','password')or print (mysql_error());
  print "Conectado com sucesso!";
  ?>

Em caso de a conexão falhar, o sistema imprimirá uma mensagem de erro.

Exemplo de um sistema em PDO PHP

Primeiramente, declaramos as variáveis necessárias, como nome do servidor, nome de usuário e senha:

<?php
$servername = "localhost";
$username = "username";
$password = "password";

Agora, criamos a conexão com o banco de dados:

try {

$conn = new PDO("mysql:host=$servername;dbname=myDaBa", $username, $password);

 Aqui, definimos o de exceção para tratar os erros:

  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

Se deu tudo certo, imprimimos a resposta de sucesso na tela:

  echo "Conectado com sucesso!";

Ou a falha, em caso de erro:

} catch(PDOException $e) {
  echo "A sua conexão com o banco de dados falhou: " . $e->getMessage();
}
?>

Já para inclusão de dados em nosso banco com PDO, podemos escrever o seguinte código:

<?php
  $banco = new PDO('mysql:host=localhost;dbname=nome_do_banco_de_dados', 'username','password');
  $novo_colaborador= array('nome'=>'Joca','setor'=>'Tecnologia',’cidade’=>'Guarujá');
  $banco->prepare('INSERT INTO clientes (nome,setor,cidade) VALUES (:nome,:setor,:cidade)')->execute($novo_colaborador);
  ?>

Pesquisa de dados no MySQL: queries e stored procedures na prática!

Saiba que também é possível pesquisar diretamente nas bases MySQL, usando recursos como queries e stored procedures. Primeiro, vamos abrir um arquivo e dar o nome de TestePDO.php, e usar o seguinte código:

<?php
 
//Dados gerais necessários para a comunicação entre a a plicação e o banco de dados
$host = "Nome_do_host";
$db = "Nome_da_base_de_dados";
$user = "Nome_do_usuário";
$pass = "Senha_da_base_de_dados";
$tabela = "Nome_da_Tabela";
 try
{
   $lig = new PDO("mysql:dbname=$dbn; host=$host", $user, $pass);
   $lig->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

Para fazer uma pesquisa via procedures, escrevemos da seguinte maneira:

   $pesq = "N_QUERRY";
   $sql = "CALL procedure()";

Já para pesquisa via query, faríamos assim:

   $pesq = "Campo";
   $sql = "SELECT * FROM $tabela WHERE nome= :nome_param";
 
   $resultados = $lig->prepare($sql);

 Definindo os parâmetros acessados pelo banco de dados:

   $resultados->bindParametro(":nome_parametro", $pesq, PDO::PARAM_STR);
   $results->execute();
 
   echo'<p>'.$sql.'</p><hr>';

   foreach($results as $linha)
   {
      echo '<p>';
//Nome do campo na tabela pesquisada

      echo $linha["Coluna"];
      echo '</p>';
   }


//exibindo resultados:
   echo '<hr><p>ResultadosPesq: '.$results->rowCount().'</p>';
 
//Desconectar
   $lig = null;
}
catch(PDOException $erro)
{
   echo $erro->getMessage();
}
 
?>

Importante notar que para cada sistema, a implementação de cada banco de dados deverá variar — ou seja, o seu código deverá obedecer o sistema em que está inserido, pois ele será diferente para versões do Linux, do Windows etc.

Quais as vantagens de usar o PDO?

A vantagem principal de usar o PDO é a abstração do banco de dados. Como o código PDO é independente do banco de dados específico que você está usando, você pode facilmente trocar para um diferente (como MySQL ou SQLite, bancos que têm quase o mesmo padrão de querries), sem alterar seu código existente.

Outras vantagens incluem suporte para transações e os chamados “prepared statements”, que podem melhorar significativamente a segurança e o desempenho da sua aplicação Web ao codificá-la em PHP.

Quais os desafios ao usar o PDO?

Os principais desafios ao usar o PDO PHP são os de gerenciar as conexões com o banco de dados e escrever código para manipular os resultados das consultas. Se você não estiver familiarizado com o SQL, por exemplo, poderá achar algumas das funções do PDO um pouco confusas.

No entanto, existem muitos recursos online que podem ajudar a aprender rapidamente o básico do SQL, além da possibilidade de usar outros bancos de dados que você achar mais fácil, ou que já tenha alguma prática.

Chegamos ao fim de nosso guia! Esperamos que você tenha compreendido o que é o PHP Data Objects e como ele funciona. Vimos, durante o material, quais são os bancos de dados usados pelo PDO e como implementá-lo por meio do Composer, aprendendo a fazer a instalação desse componente.

Também vimos como usar o PDO PHP na prática, com um passo a passo didático para uma visualização simplificada das funções desse recurso por pessoas iniciantes no tema. Entendemos as vantagens de usar o PDO, assim como quais são os desafios enfrentados ao trabalhar com objetos de dados em PHP.

Quer saber mais sobre desenvolvimento Web? Clique aqui!