Você está na página 1de 10

28/12/2016

TrabalhandocomdiversostiposdebancosdedadosemPHP

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

Trabalhando com diversos tipos de banco


s de dados em PHP
Nesse artigo apresentaremos a manipulao de diversos tipos de
banco de dados com PHP, dentre eles o MySQL, SQL Server,
Firebird/Interbase, Oracle, PostgreSQL, SQLite e ODBC, alm de uma
viso geral sobre o PHP Data Objects (PDO).

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>

PHP Data Objects (PDO)


OPDOumacamadadeabstraodeacessoadadosquetrazcomoprincipalcaractersticaapossibilidade
demigraodeumbancodedadosparaoutro.Paraissoutilizamtodosdemanipulaodedadosqueso
independentesdequalquerSGDB.Dessaforma,omtodoqueefetuaumaconsultaemumbancoOracle
seromesmoparaoMySQL,eassimpordiante.
OPHPDataObjectsumafuncionalidadedisponvelapartirdoPHP5.1ecompatvelcomvriosbancos
dedados,dentreelesesto:SQLServer,Firebird/Interbase,MySQL,Oracle,ODBC,PostgreSQL,SQLite,
Informix,IBM/DB2eCUBRID.
Deveserutilizadoemprojetosqueutilizammaisdeumbancoouqueexigecompatibilidadecomoutro
SGBD,noentanto,noaconselhvelemaplicaesbemdefinidasondesetemclarezasobreoSGBD
utilizado,poisoPDOacabatendocomodesvantagemafaltadevelocidadeaosercomparadocomoutros
bancos,comooMySQL.

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);
?>

PDO usando o ODBC para conectar o SQL Server


OOpenDataBaseConnectivity(ODBC)umaestruturacriadacomoobjetivodesimplificaroacessodas
aplicaescomobancodedados.ParautilizaroODBCdevemosseguirtrspassos.Inicialmentedevemos
terumaaplicaoODBCinstalada,sendoasmaisconhecidasoMicrosoftAcesseoVisualBasic.Osegundo
passopossuirumdriverODBCeoterceiropossuirumbancodedadosreal.
NaListagem14criamosumanovaconexocomobancodedadosrealoSQLServer.
Listagem14.ODBCcomSQLServer.
*
#Usurio:Devmedia
#Banco:pdobanco
#Server:PC\SQLEXPRESS
#Senha:devmedia
#Nomedatabela:autor
#DriverusadoODBCDSN
*/

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