PHP - Trabalhando com PDO (PHP Data Objects)

29/06/2010 - 08:07

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

 

	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:

 

	foreach(PDO::getAvailableDrivers() as $driver){
		echo $driver.'
'; }

 

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:

 

	$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:

 

	$clientes = $conn->prepare('SELECT id, nome FROM clientes');
	$clientes->execute();

	while ($dadosClientes = $clientes->fetch()){
		echo 'ID: ' . $dadosClientes['id'] . '  Nome: ' . $dadosClientes['nome'] . '
'; }

 


Viu como é simples? Você também pode passar parâmetros para a consulta da seguinte forma:

 

	$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'] . '
'; }

 

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:

 

	$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!

Tags: PHP

Adicionar ao Delicious Adicionar ao Digg Adicionar ao Google Bookmarks Adicionar ao Technorati Postar no Twitter Adicionar ao Yahoo! Bookmarks

Comentários

Nome: goncin
Comentário: Ótimo post, Jonnas. Não sei se é força do (mau) hábito, mas sempre preferi a biblioteca ADODb (http://adodb.sourceforge.net) ao PDO, apesar de este ser "oficial". Será que alguém já fez algum comparativo de desempenho entre os dois? De toda forma, é bem melhor do que ficar usando mysql_*, pg_* e afins.


Comente você também!

Não será publicado

Negrito Itálico Sublinhado

 
 

Sobre

Esse site era pra ser um portfólio inicialmente, mas acabou meio que virando um blog. Pretendo postar algumas coisas que considero interessantes e que podem ajudar outras pessoas. Esse site não usa Wordpress como parece, somente um template para Wordpress :)

jQuery - Biblioteca Javascript
Mozilla Firefox - O melhor browser do mundo   Linux - O melhor sistema operacional do mundo   Ubuntu - Distribuição do Linux baseada em Debian FileZilla - Cliente de FTP Mozilla Thunderbird - Cliente de Email PostgreSQL - O mais avançado banco de dados Open Source do mundo Apache - Servidor web PHP - Linguagem de programação server-side

© 2010 Jonnas Fonini.

Q2SU2HZ4A5TR