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 PHPPHP44 conteúdosPadronizando seu código com PHP CS FixerDev (Back & Front) · mai 2019Docker de imagem. Para rodar projetos PHP em menos de 30 segundosDev (Back & Front) · jan 2026PHP 7.3: conheça as novidades desta versãoDev (Back & Front) · abr 2019Ver tudo em Dev (Back & Front) , surgiu a necessidade de
unificar o acesso a diferentes bancos de dadosBanco de dados134 conteúdosSQL ou NoSQL: eis a questão!!Data · mar 2020Banco de dados: como organizar e dar segurança para milhões de dados de loteriasData · mai 20215 serviços gratuitos na cloud para bancos de dados PostgresData · fev 2025Ver tudo em Data 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 linuxLinux34 conteúdosKali Linux em um Servidor VPS: como, quando e por que usar?DevSecOps · dez 2024Construindo um Windows Service ou Linux Daemon com Worker Service & .NET Core – Parte 2Dev (Back & Front) · jul 2020Criando uma WebApi utilizando .NET, Linux e VSCodeDev (Back & Front) · ago 2019Ver tudo em DevSecOps
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