Académique Documents
Professionnel Documents
Culture Documents
PHPPDO:Comoseconectaraobancodedados
www.devmedia.com.br
[versoparaimpresso]
Linkoriginal:http://www.devmedia.com.br/articles/viewcomp.asp?comp=37211
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.
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