Introdução ao PHP Data Objects, conhecido como PDO, uma classe de conexão PHP com banco de dados.

PHP PDO – Classe de conexão PHP com banco de dados


“PHP Data Objects” – conhecido como PDO, é uma biblioteca de abstração de conexões com banco de dados que fornece uma interface para se comunicar com vários bancos usando a mesma API – isto é – com ela você irá usar os mesmos métodos para realizar consultas, pegar valores de uma uma tabela e operações em um banco.

Porém isso não significa que a abstração da base de dados seja sempre a mesma, pois a PDO não reescreve seu código SQL ou emula funcionalidades não suportadas pelo banco, você deve conhecer o banco que está utilizando e deve usar também drivers específicos para cada um deles.

Abaixo temos uma lista de drivers suportados pela PDO:

  • CUBRID
  • MS SQL Server
  • Firebird
  • IBM
  • Informix
  • MySQL
  • MS SQL Server
  • Oracle
  • ODBC and DB2
  • PostgreSQL
  • SQLite
  • 4D

Uma das principais vantagens de se trabalhar com a PDO é a possibilidade de trabalhar com vários bancos simultaneamente e também sua segurança no tratamento de valores externos, como por exemplo ao pegar um valor como “ $_GET['id']” e inserir em seu código.

Supondo que precisamos obter o valor $_GET[‘id’] de uma URL para pegar informações de um cliente em uma tabela, em nosso código e não foi utilizado nenhum tipo de tratamento como filter_input para pegar esse valor. No código abaixo veremos a maneira correta (usando prepared statements) e a errada (usando queries “brutas”) de fazer o mesmo código.

Sabemos que $infoClienteCerto e $infoClienteErrado tem os mesmos resultados, pois ambos os métodos que pegam os valores para estas variáveis tem a mesma funcionalidade, porém com uma particularidade diferente em cada uma.

No metodoErrado() nós estamos pegando um ID bruto de uma URL, ele pode ser alterado por algum usuário com a intenção de executar consultas dentro de nosso banco sem que esta esteja permitida no sistema, este tipo de vulnerabilidade é chamada de SQL Injection, não é uma vulnerabilidade complexa de se corrigir, porém você deve prestar muita atenção na forma na qual escreve seu código e em sua devida lógica.

Você até poderia usar esse método em seu programa, desde que o ID fosse tratado antes com um filter_input, porém não é o recomendado, já estamos usando um método de uma classe, por boas práticas, esse método já deve estar preparado para receber qualquer tipo de input que possa ser enviado para ela, é possível observar a maneira mais simples e prática no metodoCorreto(), onde o ID já é tratado automaticamente pela PDO.

Em certos casos você poderá realizar verificações adicionais para o ID, porém poderá contar também com a segurança do PDO em seus códigos.

Outro ponto positivo em usar a PDO é a possibilidade de fechar conexões implicitamente apenas destruindo um objeto, como no exemplo acima, atribuímos $db = null no final de nossa consulta, o que irá chamar um método destrutor e fechar nossa conexão com segurança, evitando que seu código consuma recursos demais de um determinado servidor.

Confira o uso correto da PDO.

Usando a PDO

Por padrão, o driver do MySQL já vem ativo com PHP 5.1.0, portanto caso sua base de dados esteja em um servidor MySQL, você poderá usar da seguinte forma.

Se o seu código utilizasse SQLite, sua utilização seria similar, apenas substituindo a instanciação da PDO.

Conexões persistentes

Se você tiver total controle sobre o que está fazendo, pode utilizar conexões persistentes em suas aplicações, o que irá ganhar desempenho, porém com um código mau otimizado poderá esgotar os recursos do seu servidor.

Uma conexão persistente só é útil quando você tem muitos processos “filhos” gerenciado por um processo “pai”, onde os processos “filhos” irão criar as conexões persistentes, e quando elas forem solicitadas novamente pelo mesmo host com as mesmas credenciais, serão reutilizadas ao invés de criar novas conexões. Uma vantagem é que é possível diminuir a sobrecarga de seu servidor em certos casos, porém você não tiver um controle, você poderá esgotar o número de conexões do servidor.

Caso decida usar conexões persistentes, veja o exemplo:

Para mais informações, você pode consultar a documentação completa no site do PHP


Renan Cavalieri
Postado por
Em setembro 16, 2015 as 3:16 pm

Faça seu comentário

Comente sobre o artigo, sua opinião é muito importante para nós!

  • http://cursophpdozeroaoprofissional.com/ PHP do Zero ao Profissional

    Obrigado por compartilhar este artigo sobre PDO. É incrível a quantidade de dúvidas que eu vejo
    sobre a biblioteca, e acredito que você explicou muito bem. Parabéns!