Relatório Técnico: PHP Data Objects (PDO)

Data: 05/09/2025

Autor: Kevin Gabriel de Souza

Disciplina: Desenvolvimento Web com PHP

1. Introdução

O PHP Data Objects (PDO) é uma camada de abstração para acesso a bancos de dados em PHP, fornecendo uma interface consistente para trabalhar com diversos sistemas de gerenciamento de banco de dados. Este relatório tem como objetivo apresentar os conceitos fundamentais do PDO, suas vantagens e como utilizá-lo efetivamente em projetos PHP.

2. O que é o PDO e sua função no PHP

O PDO (PHP Data Objects) é uma extensão do PHP que fornece uma interface leve e consistente para acessar bancos de dados. Sua principal função é servir como uma camada de abstração entre o código PHP e o banco de dados, permitindo que os desenvolvedores escrevam código independente do banco de dados específico que está sendo utilizado.

<?php
// Exemplo básico de uso do PDO
try {
    $pdo = new PDO('mysql:host=localhost;dbname=meu_banco', 'usuario', 'senha');
    echo "Conexão estabelecida com sucesso!";
} catch (PDOException $e) {
    echo "Erro na conexão: " . $e->getMessage();
}
?>

3. Diferenças entre mysqli e PDO

Característica MySQLi PDO
Abstração de banco Suporta apenas MySQL Suporta múltiplos bancos
API Procedural e OO Apenas Orientada a Objetos
Prepared Statements Suporta Suporta (mais flexível)
Nome de parâmetros Apenas posicionais (?) Posicionais e nomeados

4. Processo de conexão com MySQL utilizando PDO

O processo de conexão com um banco de dados MySQL usando PDO envolve a criação de uma instância da classe PDO, passando o DSN (Data Source Name), usuário e senha.

<?php
// Conexão básica com MySQL
$host = 'localhost';
$dbname = 'meu_banco';
$user = 'usuario';
$pass = 'senha';

try {
    // Criando a conexão PDO
    $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $user, $pass);
    
    // Configurando atributos do PDO
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
    
    echo "Conexão bem-sucedida!";
} catch (PDOException $e) {
    die("Erro na conexão: " . $e->getMessage());
}
?>

5. Data Source Name (DSN), usuário e senha

DSN (Data Source Name): String que especifica o driver do banco de dados e os parâmetros de conexão. Segue o formato: driver:parametro=valor;parametro=valor

Exemplos de DSN:

Usuário: Nome de usuário para autenticação no banco de dados

Senha: Senha do usuário para autenticação no banco de dados

6. Tratamento de erros com try/catch e PDOException

O PDO utiliza exceções para tratamento de erros, o que permite um controle mais refinado sobre falhas na conexão ou execução de queries.

<?php
try {
    // Tentativa de conexão
    $pdo = new PDO('mysql:host=localhost;dbname=banco_inexistente', 'user', 'pass');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    // Tentativa de consulta
    $stmt = $pdo->prepare("SELECT * FROM tabela_inexistente");
    $stmt->execute();
    $resultados = $stmt->fetchAll();
    
} catch (PDOException $e) {
    // Capturando e tratando a exceção
    echo "Erro do PDO: " . $e->getMessage();
    echo "Código do erro: " . $e->getCode();
    
    // Registrando o erro em um log
    error_log("Erro de BD: " . $e->getMessage(), 3, "erros.log");
    
    // Retornando uma mensagem amigável para o usuário
    die("Desculpe, ocorreu um erro em nosso sistema. Tente novamente mais tarde.");
}
?>

7. Principais vantagens de utilizar PDO

  1. Abstração de banco de dados: Escreva código uma vez e use com múltiplos bancos de dados
  2. Prepared statements: Proteção contra injeção de SQL de forma nativa
  3. Tratamento consistente de erros: Uso de exceções para tratamento uniforme de erros
  4. Flexibilidade na recuperação de dados: Múltiplos modos de fetch
  5. Transações: Suporte a transações com métodos simples
  6. Performance: Menos overhead comparado a outras camadas de abstração

8. Conclusão

O PDO representa uma evolução significativa no acesso a bancos de dados em PHP, oferecendo uma interface consistente, segura e eficiente para trabalhar com diversos sistemas de gerenciamento de banco de dados. Sua adoção é recomendada para novos projetos, uma vez que proporciona maior segurança contra injeção de SQL através de prepared statements, abstração de banco de dados e um modelo de tratamento de erros robusto através de exceções.

A migração de extensões mais antigas como mysql_* ou mesmo mysqli para PDO é vantajosa, considerando os benefícios em termos de segurança, portabilidade e manutenibilidade do código.

Referências