Dev (Back & Front)ARTIGO

Desenvolvendo com PDO PHP Data Objects

Veremos hoje os benefícios de desenvolver com PDO, mas primeiro
vamos entender um pouco sobre ele e como tudo funciona.

Em razão da crescente utilização do PHP, surgiu a necessidade de
unificar o acesso a diferentes bancos de dados presentes no PHP e assim
surgiu o PDO PHP Data Objects, no qual o objetivo é definir uma interface
limpa e consistente, unificando a maioria das características presentes
nas extensões de acesso a banco de dados.

A PDO fornece uma camada de abstração de dados de acesso, significa
que, independente de qual banco de dados esteja usando, você usa as
mesmas funções para manipular os dados, além de ser extremamente segura
contra SQL Injection. A classe PDO foi incorporada ao PHP na versão 5.1 e
é disponibilizado junto com a PECL do PHP 5, além disso, exige
características orientadas a objetos do core do PHP 5, ou seja, não
espere que o PDO funcione em versões anteriores.

Para podermos utilizar o PDO, deve-se habilitar no php.ini
os drivers de acesso para o banco de dados de nossa aplicação, no linux
habilitamos da seguinte forma:

extension=pdo.so<br />extension=pdo_mysql.so<br />extension=pdo_pgsql.so<br />extension=pdo_sqlite.so

E no windows:

extension=php_pdo.dll<br />extension=php_pdo_mysql.dll<br />extension=php_pdo_pgsql.dll<br />extension=php_pdo_sqlite.dll

Obviamente que você irá habilitar somente os drivers que deseja
utilizar, consulte a lista completa de drivers aqui: PDO
Drivers

Se você usa uma revenda ou um servidor alugado e não tem acesso ao php.ini, verifique os drivers habilitados assim:

<?php<br />foreach(PDO::getAvailableDrivers() as $driver)<br />{<br />    echo $driver.'<br />';<br />}<br />?>

Exemplos

Vou colocar dois exemplos de como usar PDO. Primeiro caso,
inserção de dados. O programa vai se conectar com o banco chamado leomoreira
no servidor localhost, em seguida vai os inserir dados na
tabela veiculos e depois fechar a conexão. Caso ocorra
algum erro será gerada uma exceção devidamente tratada com o bloco try/catch

<?php<br />try<br />{<br />	//instancia o objeto PDO, conectando com o banco mysql<br />    $conn = new PDO('mysql:host=localhost;port=3306;dbname=leomoreira', 'root', '123456');<br /><br />    //executa as instruções SQL<br />    $conn->exec("INSERT INTO veiculos (codigo, fabricante, modelo) VALUES (1, 'Honda', 'Civic')");<br />    $conn->exec("INSERT INTO veiculos (codigo, fabricante, modelo) VALUES (2, 'Honda', 'City')");<br />    $conn->exec("INSERT INTO veiculos (codigo, fabricante, modelo) VALUES (3, 'Honda', 'Fit')");<br />    $conn->exec("INSERT INTO veiculos (codigo, fabricante, modelo) VALUES (4, 'Honda', 'Accord')");<br /><br />    //fecha a conexão<br />    $conn = null;<br />}<br />catch (PDOException $i)<br />{<br />	//se houver exceção, exibe<br />	print "Erro: <code>" . $i->getMessage() . "</code>";<br />}<br />?>

Fácil, não? Segundo caso, listagem de dados. O programa vai se conectar ao
banco conforme o exemplo anterior, em seguida vai listar os dados tabela
veiculos e exibir o fabricante e modelo, veja como os
resultados são percorridos com foreach.

<?php<br />try<br />{<br />	//instancia o objeto PDO, conectando com o banco mysql<br />    $conn = new PDO('mysql:host=localhost;port=3306;dbname=leomoreira', 'root', '123456');<br /><br />    //executa a instrução de consulta<br />    $result = $conn->query("SELECT fabricante, modelo FROM veiculos");<br /><br />    if($result)<br />	{<br />		//percorre os resultados via o laço foreach<br />		foreach($result as $linha){<br />			//exibe o resultado<br />			print $linha['fabricante'] . " - " . $linha['modelo'] . "<br>\n";<br />		}<br /><br />	}<br />    //fecha a conexão<br />    $conn = null;<br />}<br />catch (PDOException $i)<br />{<br />	//se houver exceção, exibe<br />	print "Erro: <code>" . $i->getMessage() . "</code>";<br />}<br />?>

Resultado:

Honda - Civic<br />Honda - City<br />Honda - Fit<br />Honda - Accord

Podemos também retornar os dados usando a função fecth(),
assim:

<?php<br />try<br />{<br />	//instancia o objeto PDO, conectando com o banco mysql<br />    $conn = new PDO('mysql:host=localhost;port=3306;dbname=leomoreira', 'root', '123456');<br /><br />    //executa a instrução de consulta<br />    $result = $conn->query("SELECT fabricante, modelo FROM veiculos");<br /><br />    if($result)<br />	{<br />		//percorre os resultados via o fetch()<br />		while ($linha = $result->fetch(PDO::FETCH_OBJ))<br />		{<br />			//exibe resultado<br />			print $linha->fabricante . " - " . $linha->modelo . "<br>\n";<br />		}<br /><br />	}<br /><br />    //fecha a conexão<br />    $conn = null;<br />}<br />catch (PDOException $i)<br />{<br />	//se houver exceção, exibe<br />	print "Erro: <code>" . $i->getMessage() . "</code>";<br />}<br />?>

PDO na prática

Bom, pessoal, eu queria mostrar um exemplo mais complexo de como usar o
PDO com orientação a objetos, dentro de uma classe para gerenciar
conexões com vários bancos, mas o artigo já está muito grande, então vou deixar esse exemplo para o próximo artigo. Até lá!

IT Manager no Pleimo, coke addic, nerd, perfeccionista e apaixonado pelo que faz.

Ver perfil