Data: 05/09/2025
Autor: Kevin Gabriel de Souza
Disciplina: Desenvolvimento Web com PHP
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.
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(); } ?>
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 |
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()); } ?>
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:
mysql:host=localhost;dbname=test;charset=utf8
pgsql:host=localhost;port=5432;dbname=test
sqlite:/caminho/para/banco.sqlite
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
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."); } ?>
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.