Sie sind auf Seite 1von 5

29/12/2016

PHPPDO:Comoseconectaraobancodedados

www.devmedia.com.br
[versoparaimpresso]
Linkoriginal:http://www.devmedia.com.br/articles/viewcomp.asp?comp=37211

PHP PDO: Como se conectar ao banco de


dados
Nesse artigo iremos ver como funciona a nova API mais usada de
conexo com banco de dados em PHP, o PDO e tambm veremos
como se conectar ao banco de dados e retornar registros usando
Prepared Statement.

OPDO(PHPDataObjects)defineumainterfacedeconexoabancodedadosleveeconsistenteparaPHP.
HapossibilidadedeutilizaodediversosdriversdeconexoqueimplementamainterfacedoPDOpara

Receba notificaes :)

vriostiposdebancosdedados.
ComooPDOrepresentaumacamadadeabstraodeacessoaosdados,asmesmasfunesutilizadaspara
manipulardadosourecuperarinformaesdobancoseroasmesmas,independentementedobancode
dadosqueestejasendousado.

Figura1:PDOemPHP
ExistemtrsAPIsdeconexocomobancodedadosemPHP,soelas:

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=37211

1/5

29/12/2016

PHPPDO:Comoseconectaraobancodedados

mysql
mysqliMySQLmelhorado
pdoPHPDataObjects
Saiba mais sobre o PDO

EmdiversosartigosjvimoscomoseconectarusandoaAPImysql,masparaaquelesquenosabemcomo
usar,iremosverumexemplodeconexocomessaAPI.
<?php
#Conexo
mysql_connect('localhost','username','password')ordie('Nofoipossvelconectaraobancodedados:'.mysql_error());
#Escolhendoobancodedados
mysql_select_db('suaDatabase')ordie('Nofoipossvelselecionarobancodedados');
#Realizaaconsultanatabela
$query="SELECT*fromsuaTabela";
$result=mysql_query($query)ordie('FalhanainstruoSQL:'.mysql_error());
#Filtraatravsdaslinhasdeconsulta
while($row=mysql_fetch_object($result)){
echo$row>name;
}
?>

Listagem1.ConexocomAPImysql
Comopodemosverocdigoacimamuitosimplesefcildeusar,masaAPIfoidescontinuada.

MuitaspessoasficamumpoucointimidadasemusaroPDOdeincio,noporsetratardeumaAPIdifcilde
usar,muitopelocontrrio,poismuitofcildeusar,massimporqueaAPImysqlmuitofcildeusareas
pessoasacabamseacostumandocomela.
Masvamosvercomorealmentefcildeusla.

Receba notificaes :)

OPDOumaAPImaisrobustaquepodeserusada,independentementedodriverquevocestiverusando.

Conexo ao banco de dados


PrimeirovamosvercomoseconectarusandooPDO.Nsvamoscriarumanovainstnciadeclassee
especificarodriverquevamosusar,nocasoomysql,onomedobancodedados,nomedeusurioesenha.
<?php
$conn=newPDO('mysql:host=localhost;dbname=meuBancoDeDados',$username,$password);
?>

Listagem2.CriandoconexocomPDO
ComovimosnaListagem2,tambmmuitosimplesseconectarusandooPDO,mascomoemtoda
conexo,precisotrataroserros,parasecasoaconteaalgumerronaconexo,mostrarissoaousurio.
Paraissovamosusarotry..catch,usadonaslinguagensorientadaaobjetos.
<?php
try{
$conn=newPDO('mysql:host=localhost;dbname=meuBancoDeDados',$username,$password);
$conn>setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
}catch(PDOException$e){
echo'ERROR:'.$e>getMessage();

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=37211

2/5

29/12/2016

PHPPDO:Comoseconectaraobancodedados

}
?>

Listagem3.Tratandoerrosnaconexo
OerropadrodoPDOoPDO::ERRMODE_SILENT,masnonossocdigousamoso
PDO::ERRMODE_EXCEPTIONeabaixovoulistarasopesquetemos:
PDO::ERRMODE_SILENT
PDO::ERRMODE_WARNING
PDO::ERRMODE_EXCEPTION
Saiba mais sobre como conectar MySQL com PHP

Fetch
AgoravamosfazercomearautilizaroselectcomPDO,buscandodeterminadosresultados.Existemduas
formasbsicasdesefazerisso:ConsultandoeExecutandoesoessasduasqueiremosanalisarmaispra
frente.
<?php
/*
*Mtododeconexosempadres
*/

try{
$conn=newPDO('mysql:host=localhost;dbname=meuBancoDeDados',$username,$password);
$conn>setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

$data=$conn>query('SELECT*FROMminhaTabelaWHEREnome='.$conn>quote($name));

foreach($dataas$row){
print_r($row);

Receba notificaes :)

$name='Ricardo';

}
}catch(PDOException$e){
echo'ERROR:'.$e>getMessage();
}
?>

Listagem4.ConectandocombancodedadosusandoPDO
Emboraissofuncione,observequeaindaestamosescapandomanualmenteosdadosdousuriocomo
mtodoPDO::quote.Pensenissocomomtodo,maisoumenos,oequivalenteaomysql_real_escape_string
noPDO.
Emsituaes,quandovocestvinculadoaosdadosfornecidospelousurioparaumaconsultaSQL,
fortementeaconselhvelquevoc,emvezusarisso,usepreparedstatements.
Ditoisto,sesuasconsultasSQLnosodependentesdedadosdoformulrio,omtododeconsultauma
escolhatil,etornaoprocessodeloopatravsdosresultadostofcilcomoumainstruoforeach.
<?php
/*
*MelhorprticausandoPreparedStatements

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=37211

3/5

29/12/2016

PHPPDO:Comoseconectaraobancodedados

*
*/

$id=5;
try{
$conn=newPDO('mysql:host=localhost;dbname=meuBancoDeDados',$username,$password);
$conn>setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

$stmt=$conn>prepare('SELECT*FROMminhaTabelaWHEREid=:id');
$stmt>execute(array('id'=>$id));

while($row=$stmt>fetch()){
print_r($row);
}
}catch(PDOException$e){
echo'ERROR:'.$e>getMessage();
}
?>

Listagem5.UsandoPreparedStatements
Nesteexemplo,estamosusandoomtododepreparopara,literalmente,prepararaconsulta,antesdeos
dadosdousurioforemanexados.Comestatcnica,oSQLInjectionpraticamenteimpossvel,porqueos
dadosnonuncasoinseridosnaconsultaSQLemsi.
Observeque,emvezdisso,usamosparmetrosnomeados(:id)paraespecificarespaosreservados.

espaosreservados.
$stmt>execute(array('id'=>$id));

Umsuplente,masperfeitamenteaceitvelabordagem,seriausaromtodobindParam,assim:
Umaformaalternativamasqueperfeitamenteaceitvelequepodeserusadasemmedoporquemquiser

Receba notificaes :)

Nsexecutamosaconsulta,aopassarumamatriz,quecontmosdadosquedevemservinculadosaesses

usar,usaromtodobindParam,ficandodessaforma:
$stmt>bindParam(':id',$id,PDO::PARAM_INT);
$stmt>execute();

Listagem6.UsandoomtodobindParam
Depoisdechamaromtodoexecute,existemdiferentesmaneirasdereceberosdados:umamatriz(o
padro),umobjeto,etc.Noexemploacima,arespostapadro:PDO::FETCH_ASSOC,oquepodeser
facilmentesubstitudacasosejanecessrio.
while($row=$stmt>fetch(PDO::FETCH_OBJ)){
print_r($row);
}

Listagem7.Especificandoainterao
Nocdigoacima,especificamosquensqueremosinteragircomoresultsetdamelhormaneiraorientadaa
objetos.Abaixoireilistaralgumasdasopesdisponveisparaessainterao.
PDO::FETCH_ASSOC:Retornaumamatriz.

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=37211

4/5

29/12/2016

PHPPDO:Comoseconectaraobancodedados

PDO::FETCH_BOTH:Retornaumamatriz,indexadapelonomedacolunae0indexados.
PDO::FETCH_BOUND:RetornaTRUEeatribuiosvaloresdascolunasnoseuconjuntoderesultados
paraasvariveisPHPqueestavamamarradas.
PDO::FETCH_CLASS:Retornaumanovainstnciadaclasseespecificada.
PDO::FETCH_OBJ:Retornaumobjetoannimo,comnomesdepropriedadesquecorrespondems
colunas.
Masexisteumproblemaaindacomoquefizemosatagoranocdigo,nsnoestamosdandofeedback
nenhumparaousuriose,porexemplo,quandonenhumresultadoforretornado.
Nocdigoabaixoiremosconsertaressafaltadefeedbackedarumretornoaousurio.
<?php
$stmt>execute(array('id'=>$id));

#Pegaumarraycontendotodososresultados
$result=$stmt>fetchAll();

#Seumoumaisresultadosforemretornados...
if(count($result)){
foreach($resultas$row){
print_r($row);
}
}else{
echo"Nenhumresultadoretornado.";
}

Listagem8.Retornandofeedbackaousurio
Dessaforma,nossocdigocompletopodeservistonaListagem9.
<?php
$id=5;

Receba notificaes :)

?>

try{
$conn=newPDO('mysql:host=localhost;dbname=meuBancoDeDados',$username,$password);
$stmt=$conn>prepare('SELECT*FROMminhaTabelaWHEREid=:id');
$stmt>execute(array('id'=>$id));

$result=$stmt>fetchAll();

if(count($result)){
foreach($resultas$row){
print_r($row);
}
}else{
echo"Nennhumresultadoretornado.";
}
}catch(PDOException$e){
echo'ERROR:'.$e>getMessage();
}
?>

Listagem9.Cdigocompletodoexemplo

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=37211

5/5

Das könnte Ihnen auch gefallen