Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
TrabalhandocomdiversostiposdebancosdedadosemPHP
www.devmedia.com.br
[versoparaimpresso]
Linkoriginal:http://www.devmedia.com.br/articles/viewcomp.asp?comp=33165
Emaplicaesweb,vriasvezesprecisamossalvarinformaesparaseremutilizadasposteriormente,
vemosissoclaramentequandoprecisamosacessarumapginaenosdeparamoscomumformulriode
loginesenha:essesdadosjforamposteriormentecadastradoseagoraapginaprecisachecarse
realmenteosdadosbatemcomoscadastrados.Paraimplementarmosessecenrionosuficiente
trabalharcomsesses,poiselassalvaosdadosenquantoaaplicaonofechada,dessaforma,na
prximavezqueformosacessarumapginaessasinformaesnoestaromaisltambmnopossvel
fazerissocomcookies,poisaqualquermomentoousuriopoderfazerumalimpezadosmesmossalvosno
navegadoreosdadosseroperdidos.Pararesolveresseproblemadevemosutilizarumbancodedados.
EmPHPexisteumasequncialgicaparasetrabalharcombancodedados,queconsisteetrspassos:
1.Primeiro,voccriarvariveisnoseuarquivoPHPinformandoonomedobanco,aporta,ousurioea
senha,eusarafunoprpriadotipodebancoparaabrirumanovaconexo
2.Segundo,utilizaremosasfunesdemanipulaoparaexecutarocdigoSQLquesedeseja
3.Terceiro,fecharemosaconexo.
Paratrabalharcomqualquertipodebancodedadosdevemosseguiressasequnciaaseguirveremos
algunsexemplosparacadatipodebanco.
MySQL
OMySQLpermitearmazenardadosorganizadosemtabelas,queporsuavez,soassociadasaoutras
tabelas,possibilitandooagrupamentodedados.
ParacriarumarquivodeconexodeumaaplicaoPHPcomessebancodedadosiremosutilizarasfunes
mysql_connect()emysql_select_db(),comopodemosvernaListagem1.
Listagem1.ArquivodeconexocomoMySQL.
<?php
$servidor='localhost';
http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=33165
1/10
28/12/2016
TrabalhandocomdiversostiposdebancosdedadosemPHP
$banco='mydatabase';
$usuario='root';
$senha='root';
$link=mysql_connect($servidor,$usuario,$senha);
$db=mysql_select_db($banco,$link);
if(!$link)
{
echo"Ocorreuumerronaconexocomobancodedados.";
exit();
}
?>
Nasquatrolinhasiniciaisdefinimosasvariveis$servidor,$banco,$usuarioe$senha,ondeestamos
armazenando,respectivamente:qualservidoriremosusar,qualonomedobancodedados,onomede
usurioeasenhadeusurio.
Afunomysql_connect()recebeosvaloresde$servidor,$usuarioe$senhacomoparmetroseestabelece
aconexo.Emseguida,devemosinformarqualonomedobancodedadosquequeremosutilizarcoma
funomysql_select_db(),querecebecomoparmetroosvaloresarmazenadosem$bancoe$link,ouseja,
onomedobancodedadoseolinkquefoiobtidacomafunomysql_connect().
Porfim,utilizamosoIFparatestarseaconexofoiestabelecidacomsucesso.
SQL Server
ParacriarmosumaconexoentreoSQLServereoPHPdevemosutilizarafunomssql_connect(),como
mostraaListagem2.Veremosondeserlistadotodososdadosdeumaconsulta,talcomosercontadoo
nmeroderegistrosnessebanco.EssafunocompatvelcomservidoresWindows2003.
Listagem2.ConectandoseaumbancodedadosSQLServer.
<?
//Dadosdobanco
$dbhost="hostbanco";#Nomedohost
$db="nomebanco";#Nomedonossobancodedados
$user="nomeusuario";#Nomedousurio
$password="senhabase";#Senhadousurio
//Dadosdatabela
$tabela="nometabela";#Nomedatabela
$campo1="campo1tabela";#Nomedoprimeirocampodatabela
$campo2="campo2tabela";#Nomedoproximocampodatabela
@mssql_connect($dbhost,$user,$password)ordie("Nofoipossvelestabelecerumaconexocomoservidor!");
@mssql_select_db("$db")ordie("Obancodedadosnofoiselecionado!");
$instrucaoSQL="SELECT$campo1,$campo2FROM$tabelaORDERBY$campo1";
$consulta=mssql_query($instrucaoSQL);
echo"Estatabelacontm$numRegistrosregistros!\n<br>\n";
if($numRegistros!=0){
while($cadaLinha=mssql_fetch_array($consulta)){
echo"$cadaLinha[$campo1]$cadaLinha[$campo2]\n<br>\n";
}
}?>
http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=33165
Receba notificaes :)
$numRegistros=mssql_num_rows($consulta);
2/10
TrabalhandocomdiversostiposdebancosdedadosemPHP
Receba notificaes :
28/12/2016
Apscriaraconexocomobanco,escolhemosqualtabelautilizaremosparacontareimprimirototalde
registrosqueexisteemcadatabela.
ParaServidorescomWindows2008podemosutilizarafunosqlsrv_connect(),comomostraaListagem
3,quedevolveomesmoresultadodaListagem2.
Listagem3.Funosqlsrv_connect().
<?
//Dadosdobanco
$dbhost="hostbanco";#Nomedohost
$db="nomebanco";#Nomedonossobancodedados
$user="nomeusuario";#Nomedousurio
$password="senhausuario";#Senhadousurio
//Dadosdatabela
$tabela="nometabela";#Nomedatabela
$campo1="campo1tabela";#Nomedocampodatabela
$campo2="campo2tabela";#Nomedeoutrocampodatabela
$conninfo=array("Database"=>$db,"UID"=>$user,"PWD"=>$password);
$conn=sqlsrv_connect($dbhost,$conninfo);
$instrucaoSQL="SELECT$campo1,$campo2FROM$tabelaORDERBY$campo1";
$params=array();
$options=array("Scrollable"=>SQLSRV_CURSOR_KEYSET);
$consulta=sqlsrv_query($conn,$instrucaoSQL,$params,$options);
$numRegistros=sqlsrv_num_rows($consulta);
echo"Estatabelacontm$numRegistrosregistros!\n<hr>\n";
if($numRegistros!=0){
while($cadaLinha=sqlsrv_fetch_array($consulta,SQLSRV_FETCH_ASSOC)){
echo"$cadaLinha[$campo1]$cadaLinha[$campo2]\n<br>\n";
}
}?>
Firebird/Interbase
OFirebirdumbancodedadosrelacionalmultiplataformaeparaseconectaraeleutilizamosafuno
ibase_connect(),querecebeumasriedeparmetros.Osprincipaisso:
database:caminhoparaoarquivodobancodedadosnoservidor
username:nomedousurio
Password:senha
Charset:padrodecaracteresutilizadospelobanco.OtipopadrooISO88591,masoutropadro
interessantedetrabalharoUTF8,quepoderepresentarqualquercarcternopadrodoUnicode
Buffers:serefereaototaldebuffersdobancodedadosquepodemseralocadosnocachedoservidor.
Listagem4.Arquivodeconexo.
<?php
$host='localhost:/path/to/your.gdb';
$dbh=ibase_connect($host,$username,$password);
$stmt='SELECT*FROMnometabela';
$sth=ibase_query($dbh,$stmt);
http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=33165
Receba notificaes :)
VejanaListagem4umexemplodearquivoPHPdeconexocomoFirebird/Interbase.
3/10
TrabalhandocomdiversostiposdebancosdedadosemPHP
Receba notificaes :
28/12/2016
while($row=ibase_fetch_object($sth)){
echo$row>email,"\n";
}
ibase_free_result($sth);
ibase_close($dbh);
?>
Oracle
ParaconectarmosumaaplicaoPHPcomoOracledevemosseguirdoispassos.
Oprimeiropassoabriroarquivophp.ini,quepodeserencontradodentrododiretriodeinstalaodo
Apache,eprocurarpeloseguintecdigo:
;extension=php_oci8.dll
;extension=php_oracle.dll
Removaodaslinhasesalve.Casoasmesmasnoexistamnoarquivo,insiraaofinal.
OsegundopassoacriaodoarquivodeconexousandooOCILogonparaasversesanterioresa5.1.2e
oci_connectparaoutrasverses,comomostraoexemplodaListagem5.
Listagem5.ConexocombancoOracle.
//metododeconexaocompativelcomversao4ouanteriordoPHP
//dependedainstalacaodoclientdooracleeconfiguracaodoarquivoTNS
$conexao_antiga=OCILogon("usuario","senha","servico");
//metodousadoapartirdoPHP5.1.2
$conexao=oci_connect('usuario','senha','127.0.0.1/nome_servico');
if(!$conexao){
$erro=oci_error();
trigger_error(htmlentities($erro['message'],ENT_QUOTES),E_USER_ERROR);
exit;
}
PostgreSQL
OPostgreSQLumSGBDdecdigoabertoqueofereceumasriedefuncionalidades.Aconexobem
semelhanteaconexocomoMySQL,comopodemosvernaListagem6.
Listagem6.ConexocombancodedadosPostgreSQL.
<?php
//local,portantocolocamoslocalhost
$servidor="localhost";
//nomedeusuariodobancodedados,rooteousuariojafornecidopelobanco
//eextremamenterecomendadoacriacaodeumnovousuario
$usuario="root";
http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=33165
Receba notificaes :)
//servidorondeestaonossobancodedados,nonossoexemploestamosutilizandoumservidor
4/10
TrabalhandocomdiversostiposdebancosdedadosemPHP
Receba notificaes :
28/12/2016
//senhadousuario,nocasodeestarmosusandoousuariorootelevemsemsenhaporpadrao
//recomendaveladicionarumasenhaparaousuarioroot,levandoemconsideraoqueeleeo
//usuariocommaioresprivilegiosnobancodedados
$senha="";
//criacaodaconexao,recebecomoparametrososervidor,ousuarioeasenha
$conexao=pg_connect($servidor,$usuario,$senha)ordie("NaofoipossivelestabelecerumaconexaocomoservidorPostGreSQL");
//casoaconexosejaefetuadacomsucesso,exibeumamensagemaousurio
echo"Conexaoefetuadacomsucesso.";
?>
SQLite
OSQLitepossuimuitascaractersticasinteressantes,dentreasquaispodemosdestacaraguardadetodoo
bancoapenasemumarquivo,suporteabasededadosacimadedoisterabytes,suporteastringseBLOBs
comotamanhoacimadedoisgigabytes,assim,nopossuinenhumadependnciaexternaepodeprocessar
vriasoperaesdeleituraaomesmotempo.Contudo,sconseguerealizarumaoperaodesadaporvez.
Veremosaseguircomotrabalharcomasduasmodalidadesdobanco:aSQLiteproceduraleaSQLite
OrientadoaObjetos.
ParaconectarmoscomoSQLitedevemosusaroseguiroexemplodaListagem7.
Listagem7.ConectandoaoSQLite.
<?php
//testasejexisteumabasededados,casonoexista,elecria
if($db=sqlite_open("c:/devmedia/databases/dbdev.db",0666,$error)){
echo"Bancodedadosencontradoeaberto...";
//criaumanovatabela
@sqlite_query($db,"CREATETABLEautores(idINTEGERPRIMARYKEY,nomeTEXT)");
//inseredados
sqlite_query($db,"INSERTINTOautoresVALUES(NULL,'LucianoAlexandre')");
//exibeosdadoscadastrados
$sql=sqlite_query($db,"SELECTid,nomeFROMautores");
//visualizaosdadosgravados
while($i=sqlite_fetch_array($sql)){
echo"<br><br>";
echo"ID:".$i['id']."<br>";
echo"Nome:".$i['nome'];
}//fechawhile
}
else{
}
?>
EparaoSQLiteOrientadoaObjetodevemosutilizarocdigodaListagem8.
Listagem8.BancodedadosSQLiteorientadoaobjetos.
http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=33165
Receba notificaes :)
die($error);
5/10
TrabalhandocomdiversostiposdebancosdedadosemPHP
Receba notificaes :
28/12/2016
<?php
try{
//criandonovainstancia
$db=newSQLiteDatabase("c:/devmedia/databases/dbdev.db",0666);
}
catch(Exception$exception){
die($exception>getMessage());
}
//criandoumanovatabela
//lembredecomentarasprximasduaslinhasdepoisdeexecutaroscriptpelaprimeiravez
$sqlC="CREATETABLEautores(idINTEGERPRIMARYKEY,nomeTEXT)";
$db>queryExec($sqlC);
//inserindodados
$sqlI="INSERTINTOcolunistas(id,nome)VALUES(NULL,'LucianoAlexandre')";
$db>queryExec($sqlI);
//visualizandodadossalvos
foreach($db>query("SELECTid,nomeFROMautores")as$row){
print_r($row);
echo"<br>";
}?>
ODBC
ODBCumaAPIquepermiteaconexocomqualquerbancodedados,sejaelelocalouremoto.Para
conectaraumbancoODBCutilizamosomtodoodbc_connect(),quedevereceberquatroparmetros:
nomedobanco,nomedousurio,senhaetipodecursor(opcional).
Depoisdeconectadopodemosutilizarafunoodbc_exec()paraexecutarmoscomandosSQLemnosso
banco.VejanaListagem9comousaressesmtodos.
Listagem9.ConexocomoODBC.
<?php
$conn=odbc_connect('banco','devmedia','devmedia');
$sql="SELECT*FROMcustomers";
$rs=odbc_exec($conn,$sql);
odbc_close($conn);//Fechaaconexocomobanco
?>
NaListagem10vamosmostrarumexemplodeutilizaodaconexocomoODBCparaimprimiremuma
pginaweboretornodeumaconsultaaobanco.
Listagem10.ExemploODBC.
<html>
<body>
<?php
ordie('FalhanaConexo');
$sql='select*fromcustomers';
$rs=odbc_exec($conn,$sql)
ordie('Erronosql');
echo"<table><tr>";
echo"<th>Nome</th>";
http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=33165
Receba notificaes :)
$conn=odbc_connect('nomebanco','nomeusuario','senha')
6/10
TrabalhandocomdiversostiposdebancosdedadosemPHP
echo"<th>Profissao</th></tr>";
Receba notificaes :
28/12/2016
while(odbc_fetch_row($rs)){
echo"<tr><td>".odbc_result($rs,"UserName")."</td>";
echo"<td>".odbc_result($rs,"ProfessionName")."</td></tr>";
}
odbc_close($conn);
echo"</table>"
?>
</body>
</html>
Habilitando o PDO
Oprimeiropassoahabilitaodoseudrive,eparaissodeveseabriroarquivophp.inieremoveroponto
evirgula()quecomentaaslinhas.ParaoWindowsuse:
extension=php_pdo.dll
extension=php_pdo_mysql.dll
EparaoLinux:
extension=pdo.so
extension=pdo_mysql.so
OPDOpuramenteorientadoaobjetos,dessaforma,acriaodeumanovaconexocomobancode
dadossedpelacriaodeumainstnciadaclassePDO,comomostradonaListagem11.
Listagem11.CriaodeumaconexoutilizandoPDO.
<?php
$db1=newPDO("mysql:host=localhost;dbname=banco","root","senha");
//PostgreSQL
$db2=newPDO("pgsql:host=localhost;dbname=banco","root","senha");
//SQLite
$db3=newPDO("sqlite:banco.sqlite");
http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=33165
Receba notificaes :)
//MySQL
7/10
TrabalhandocomdiversostiposdebancosdedadosemPHP
Receba notificaes :
28/12/2016
//Firebird
$db4=newPDO(firebird:dbname=nomebanco,SYSDBA,masterkey);
//Oracle
$host='localhost';
$porta='1521';
$usuario='root';
$senha='root';
$db5=newPDO("oci:dbname=//$host:$porta",$usuario,$senha);
?>
VejaQuecriamoscincovariveisquerecebemainstnciadaclassePDOparacadaumdostiposdebancos
quequeremosconectar,respectivamente,comoMySQL,PostgreSQL,SQLite,FirebirdeOracle.
Paraencerrarmosumaconexodevemosusaromtodounset,comonaListagem12.
Listagem12.Criandoeencerrandoumaconexocomosbancos:MySQLPostgreSQL,SQLite,Firebirde
OraclecomPDO.
<?php
//MySQL
$db1=newPDO("mysql:host=localhost;dbname=banco","root","senha");
unset($db1);//encerrandoaconexocomoMySQL
//PostgreSQL
$db2=newPDO("pgsql:host=localhost;dbname=banco","root","senha");
unset($db2);//encerrandoaconexocomoPostgreSQL
//SQLite
$db3=newPDO("sqlite:banco.sqlite");
unset($db3);//encerrandoaconexocomoSQLite
//Firebird
$db4=newPDO(firebird:dbname=nomebanco,SYSDBA,masterkey);
unset($db4);//encerrandoaconexocomoFIrebird
//Oracle
$host='localhost';
$porta='1521';
$usuario='root';
$senha='root';
$db5=newPDO("oci:dbname=//$host:$porta",$usuario,$senha);
unset($db5);//encerrandoaconexocomoOracle
?>
NaListagem13vemosacriaodeumaconexocomoSQLServerutilizandoPDO.
<?php
try{
$hostname="localhost";
$dbname="nomebanco";
$username="usuariobanco";
$password="senha";
$pdo=newPDO("mssql:host=$hostname;dbname=$dbname","$username","$password");
}catch(PDOException$e){
http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=33165
Receba notificaes :)
Listagem13.ConectandoaoSQLServercomPDO.
8/10
TrabalhandocomdiversostiposdebancosdedadosemPHP
Receba notificaes :
28/12/2016
echo"ErrodeConexo".$e>getMessage()."<\br>";
exit;
}
unset($pdo);
?>
try
{
//Conexo
$banco=newPDO("odbc:Driver={SQLServer};Server=PC\SQLEXPRESS;Database=pdobanco;Uid=sa;Pwd=devmedia;");
/*Insertnobanco*/
$executa=$banco>query("INSERTINTOautor(id,nome)VALUES('','jose')");
if($executa){
echo'Dadosinseridoscomsucesso!';
}
else{
print_r($pdo>errorInfo());
}
?>
Depoisqueestabelecemosumaconexocomumbancodedados,oPDOnosforneceosmtodospara
manipulaodobanco(insero,criao,excluso,etc.),paraissoutilizamosalinguagemSQL.
NaListagem15utilizaremosomtodoexec,quepossibilitaaexecuodecdigoSQLjuntoaonosso
bancoparacriarumatabeladefuncionrioscomoscampos,id,nome,emailecargo.
Listagem15.Implementandoeutilizandoomtodoexe.
<?php
Receba notificaes :)
$db=newPDO("mysql:host=localhost;dbname=banco","root","");
$db>exec("CREATETABLEfuncionarios(idINTAUTO_INCREMENT,nomeVARCHAR(255),emailVARCHAR(255),cargoVARCHAR(255))");
?>
Parafazermosconsultasutilizamosomtodoquery,queexecutaocomandoSQLSELECT,comomostraa
Listagem16.
http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=33165
9/10
TrabalhandocomdiversostiposdebancosdedadosemPHP
Receba notificaes :
28/12/2016
Listagem16.Fazendoumaconsultaaobanco.
<?php
$db=newPDO("mysql:host=localhost;dbname=banco","root","");
$dados=$db>query("SELECT*FROMfuncionarios");
?>
Esperoquetenhamgostado.Atmais.
Links
MySQL
https://www.mysql.com/
MicrosoftSQLServer2014
http://www.microsoftstore.com/store/msbr/pt_BR/pdp/SQLServer2014Developer
Edition/productID.304786300
Firebird
http://www.firebirdsql.org/
Interbase
http://www.embarcadero.com/br/products/interbase
Oracle
http://www.oracle.com/index.html
PostgreSQ
http://www.postgresql.org/
SQLite
https://www.sqlite.org/
DocumentaoPDO
http://www.php.net/manual/pt_BR/intro.pdo.php
porLucianoAlexandre
Receba notificaes :)
EspecialistaPHPefrontend
http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=33165
10/10