PHP: Trabalhando com PDO (PHP Data Objects)
Olá pessoal, voltando com um novo post depois de muito tempo sem blogar. Hoje vou falar sobre PDO (PHP Data Objects), uma extensão presente a partir da versão 5 do PHP que permite desenvolver códigos de acesso a banco de dados portáveis, mudando apenas uma linha de código.
Imagine um sistema cheio de mysql_connect’s, mysql_query’s e de uma hora pra outra você se vê obrigado a mudar o banco de dados pra PostgreSQL, por exemplo. Imagine o trabalho de alterar toda essa parte do seu projeto? O PDO veio para solucionar esse e muitos outros problemas, como o de SQL Injection, já que usa prepared statements (falarei deles mais abaixo). No caso de você ter um sistema inteiro usando PDO e decide mudar de SGBD, basta alterar apenas a linha de conexão com o tipo de banco de dados desejado.
Conexão
<?php
try{
$conn = new PDO('mysql:host=localhost;dbname=seuBD', 'root', '12345');
}
catch (PDOException $e){
print 'Erro: ' . $e->getMessage();
}
Este é um exemplo de conexão. Você pode criar uma classe utilizando o padrão Singleton, instanciando apenas uma conexão PDO para a aplicação inteira. Se você quisesse alterar o SGBD para PostgreSQL, bastava apenas substituir a palavra mysql por pgsql.
Para descobrir quais drivers do PDO você tem disponíveis, execute o código abaixo:
<?php
foreach(PDO::getAvailableDrivers() as $driver){
echo $driver.'<br />';
}
Por padrão, o PDO não exibe erros de consultas escritas incorretamente, por exemplo. Para exibir os erros e facilitar o desenvolvimento da aplicação, basta passar os seguintes parâmetros ao objeto:
<?php
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
Selecionando dados
Agora que você já tem seu objeto PDO instanciado, é só usá-lo para realizar as consultas. Veja um exemplo de select:
<?php
$clientes = $conn->prepare('SELECT id, nome FROM clientes');
$clientes->execute();
while ($dadosClientes = $clientes->fetch()){
echo 'ID: ' . $dadosClientes['id'] . ' Nome: ' . $dadosClientes['nome'] . '<br />';
}
Viu como é simples? Você também pode passar parâmetros para a consulta da seguinte forma:
<?php
$clientes = $conn->prepare('SELECT id, nome FROM clientes WHERE id = :id AND nome = :nome');
$clientes->bindParam(':id', $_POST['id'], PDO::PARAM_INT);
$clientes->bindParam(':nome', $_POST['nome']);
$clientes->execute();
while ($dadosClientes = $clientes->fetch()){
echo 'ID: ' . $dadosClientes['id'] . ' Nome: ' . $dadosClientes['nome'] . '<br />';
}
A grande vantagem do PDO é que se você usar prepared statements, não precisará se preocupar com SQL Injection, pois o PDO já faz todo o serviço de filtragem dos dados de entrada para você, de forma muito segura.
A lógica é a mesma para executar outros tipos de consultas. Veja um exemplo de insert:
<?php
$clientes = $conn->prepare('INSERT INTO clientes (nome) VALUES (:nome)');
$clientes->bindParam(':nome', $_POST['nome']);
$clientes->execute();
if ($clientes->rowCount() > 0){
echo 'Registro inserido com sucesso';
}
Para mais detalhes, consulte a documentação oficial.
Espero que tenham gostado do post. Um abraço e até a próxima!