Trabalhando com diversos tipos de bancos de dados em PHP

Nesse artigo apresentaremos a manipulação de diversos tipos de banco de dados com PHP, dentre eles o MySQL, SQL Server, Firebird/Interbase, Oracle, PostgreSQL, SQLite e ODBC, além de uma visão geral sobre o PHP Data Objects (PDO).

Em aplicações web, várias vezes precisamos salvar informações para serem utilizadas posteriormente, vemos isso claramente quando precisamos acessar uma página e nos deparamos com um formulário de login e senha: esses dados já foram posteriormente cadastrados e agora a página precisa checar se realmente os dados batem com os cadastrados. Para implementarmos esse cenário não é suficiente trabalhar com sessões, pois ela só salva os dados enquanto a aplicação não é fechada, dessa forma, na próxima vez que formos acessar uma página essas informações não estarão mais lá; também não é possível fazer isso com cookies, pois a qualquer momento o usuário poderá fazer uma limpeza dos mesmos salvos no navegador e os dados serão perdidos. Para resolver esse problema devemos utilizar um banco de dados.

Em PHP existe uma sequência lógica para se trabalhar com banco de dados, que consiste e três passos:

  1. Primeiro, você criará variáveis no seu arquivo PHP informando o nome do banco, a porta, o usuário e a senha, e usará a função própria do tipo de banco para abrir uma nova conexão;
  2. Segundo, utilizaremos as funções de manipulação para executar o código SQL que se deseja;
  3. Terceiro, fecharemos a conexão.

Para trabalhar com qualquer tipo de banco de dados devemos seguir essa sequência; a seguir veremos alguns exemplos para cada tipo de banco.

MySQL

O MySQL permite armazenar dados organizados em tabelas, que por sua vez, são associadas a outras tabelas, possibilitando o agrupamento de dados.

Para criar um arquivo de conexão de uma aplicação PHP com esse banco de dados iremos utilizar as funções mysql_connect() e mysql_select_db(), como podemos ver na Listagem 1.

<?php $servidor = 'localhost'; $banco = 'mydatabase'; $usuario = 'root'; $senha = 'root'; $link = mysql_connect($servidor, $usuario, $senha); $db = mysql_select_db($banco, $link); if(!$link) { echo "Ocorreu um erro na conexão com o banco de dados."; exit(); } ?>
Listagem 1. Arquivo de conexão com o MySQL

Nas quatro linhas iniciais definimos as variáveis $servidor, $banco, $usuario e $senha, onde estamos armazenando, respectivamente: qual servidor iremos usar, qual o nome do banco de dados, o nome de usuário e a senha de usuário.

A função mysql_connect() recebe os valores de $servidor, $usuario e $senha como parâmetros e estabelece a conexão. Em seguida, devemos informar qual o nome do banco de dados que queremos utilizar com a função mysql_select_db(), que recebe como parâmetro os valores armazenados em $banco e $link, ou seja, o nome do banco de dados e o link que foi obtida com a função mysql_connect().

Por fim, utilizamos o IF para testar se a conexão foi estabelecida com sucesso.

SQL Server

Para criarmos uma conexão entre o SQL Server e o PHP devemos utilizar a função mssql_connect(), como mostra a Listagem 2. Veremos onde será listado todos os dados de uma consulta, tal como será contado o número de registros nesse banco. Essa função é compatível com servidores Windows 2003.

<? // Dados do banco $dbhost = "hostbanco"; #Nome do host $db = "nomebanco"; #Nome do nosso banco de dados $user = "nomeusuario"; #Nome do usuário $password = "senhabase"; #Senha do usuário // Dados da tabela $tabela = "nometabela"; #Nome da tabela $campo1 = "campo1tabela"; #Nome do primeiro campo da tabela $campo2 = "campo2tabela"; #Nome do proximo campo da tabela @mssql_connect($dbhost,$user,$password) or die("Não foi possível estabelecer uma conexão com o servidor!"); @mssql_select_db("$db") or die("O banco de dados não foi selecionado!"); $instrucaoSQL = "SELECT $campo1, $campo2 FROM $tabela ORDER BY $campo1"; $consulta = mssql_query($instrucaoSQL); $numRegistros = mssql_num_rows($consulta); echo "Esta tabela contém $numRegistros registros!\n<br>\n"; if ($numRegistros!=0) { while ($cadaLinha = mssql_fetch_array($consulta)) { echo "$cadaLinha[$campo1] - $cadaLinha[$campo2]\n<br>\n"; } }?>
Listagem 2. Conectando-se a um banco de dados SQL Server

Após criar a conexão com o banco, escolhemos qual tabela utilizaremos para contar e imprimir o total de registros que existe em cada tabela.

Para Servidores com Windows 2008 podemos utilizar a função sqlsrv_connect(), como mostra a Listagem 3, que devolve o mesmo resultado da Listagem 2.

<? // Dados do banco $dbhost = "hostbanco"; #Nome do host $db = "nomebanco"; #Nome do nosso banco de dados $user = "nomeusuario"; #Nome do usuário $password = "senhausuario"; #Senha do usuário // Dados da tabela $tabela = "nometabela"; #Nome da tabela $campo1 = "campo1tabela"; #Nome do campo da tabela $campo2 = "campo2tabela"; #Nome de outro campo da tabela $conninfo = array("Database" => $db, "UID" => $user, "PWD" => $password); $conn = sqlsrv_connect($dbhost, $conninfo); $instrucaoSQL = "SELECT $campo1, $campo2 FROM $tabela ORDER BY $campo1"; $params = array(); $options =array("Scrollable" => SQLSRV_CURSOR_KEYSET); $consulta = sqlsrv_query($conn, $instrucaoSQL, $params, $options); $numRegistros = sqlsrv_num_rows($consulta); echo "Esta tabela contém $numRegistros registros!\n<hr>\n"; if ($numRegistros!=0) { while ($cadaLinha = sqlsrv_fetch_array($consulta, SQLSRV_FETCH_ASSOC)) { echo "$cadaLinha[$campo1] - $cadaLinha[$campo2]\n<br>\n"; } }?>
Listagem 3. Função sqlsrv_connect( )

Firebird/Interbase

O Firebird é um banco de dados relacional multiplataforma e para se conectar a ele utilizamos a função ibase_connect(), que recebe uma série de parâmetros. Os principais são:

Veja na Listagem 4 um exemplo de arquivo PHP de conexão com o Firebird/Interbase.

<?php $host='localhost:/path/to/your.gdb'; $dbh=ibase_connect($host,$username,$password); $stmt = 'SELECT * FROM nometabela'; $sth = ibase_query($dbh, $stmt); while ($row = ibase_fetch_object($sth)) { echo $row->email, "\n"; } ibase_free_result($sth); ibase_close($dbh); ?>
Listagem 4. Arquivo de conexão

Oracle

Para conectarmos uma aplicação PHP com o Oracle devemos seguir dois passos.

O primeiro passo é abrir o arquivo php.ini, que pode ser encontrado dentro do diretório de instalação do Apache, e procurar pelo seguinte código:

;extension=php_oci8.dll ;extension=php_oracle.dll

Remova o “;” das linhas e salve. Caso as mesmas não existam no arquivo, insira ao final.

O segundo passo é a criação do arquivo de conexão usando o OCILogon para as versões anteriores a 5.1.2 e oci_connect para outras versões, como mostra o exemplo da Listagem 5.

// metodo de conexao compativel com versao 4 ou anterior do PHP // depende da instalacao do client do oracle e configuracao do arquivo TNS $conexao_antiga = OCILogon("usuario", "senha", "servico"); //metodo usado a partir do PHP 5.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; }
Listagem 5. Conexão com banco Oracle

PostgreSQL

O PostgreSQL é um SGBD de código aberto que oferece uma série de funcionalidades. A conexão é bem semelhante a conexão com o MySQL, como podemos ver na Listagem 6.

<?php // servidor onde esta o nosso banco de dados, no nosso exemplo estamos utilizando um servidor // local, portanto colocamos localhost $servidor = "localhost"; // nome de usuario do banco de dados, root e o usuario ja fornecido pelo banco // e extremamente recomendado a criacao de um novo usuario $usuario = "root"; // senha do usuario, no caso de estarmos usando o usuario root ele vem sem senha por padrao // é recomendavel adicionar uma senha para o usuario root, levando em consideração que ele e o // usuario com maiores privilegios no banco de dados $senha =""; // criacao da conexao, recebe como parametros o servidor, o usuario e a senha $conexao = pg_connect($servidor, $usuario, $senha) or die ("Nao foi possivel estabelecer uma conexao com o servidor PostGreSQL"); //caso a conexão seja efetuada com sucesso, exibe uma mensagem ao usuário echo "Conexao efetuada com sucesso."; ?>
Listagem 6. Conexão com banco de dados PostgreSQL

SQLite

O SQLite possui muitas características interessantes, dentre as quais podemos destacar a guarda de todo o banco apenas em um arquivo, suporte a base de dados acima de dois terabytes, suporte a strings e BLOB’s com o tamanho acima de dois gigabytes, assim, não possui nenhuma dependência externa e pode processar várias operações de leitura ao mesmo tempo. Contudo, só consegue realizar uma operação de saída por vez.

Veremos a seguir como trabalhar com as duas modalidades do banco: a SQLite procedural e a SQLite Orientado a Objetos.

Para conectarmos com o SQLite devemos usar o seguir o exemplo da Listagem 7.

<?php //testa se já existe uma base de dados, caso não exista, ele cria if ($db = sqlite_open("c:/devmedia/databases/dbdev.db", 0666, $error)) { echo "Banco de dados encontrado e aberto..."; //cria uma nova tabela @sqlite_query($db, "CREATE TABLE autores( id INTEGER PRIMARY KEY, nome TEXT)"); //insere dados sqlite_query($db, "INSERT INTO autores VALUES( NULL, 'Luciano Alexandre')"); //exibe os dados cadastrados $sql = sqlite_query($db, "SELECT id, nome FROM autores"); //visualiza os dados gravados while ($i = sqlite_fetch_array($sql)) { echo "<br><br>"; echo "ID: ".$i['id']."<br>"; echo "Nome: ".$i['nome']; }//fecha while } else { die($error); } ?>
Listagem 7. Conectando ao SQLite

E para o SQLite Orientado a Objeto devemos utilizar o código da Listagem 8.

<?php try { //criando nova instancia $db = new SQLiteDatabase("c:/devmedia/databases/dbdev.db", 0666); } catch( Exception $exception ){ die($exception->getMessage()); } //criando uma nova tabela //lembre de comentar as próximas duas linhas depois de executar o script pela primeira vez $sqlC = "CREATE TABLE autores(id INTEGER PRIMARY KEY, nome TEXT)"; $db->queryExec($sqlC); //inserindo dados $sqlI = "INSERT INTO colunistas (id, nome) VALUES (NULL, 'Luciano Alexandre')"; $db->queryExec($sqlI); //visualizando dados salvos foreach ($db->query("SELECT id, nome FROM autores") as $row) { print_r($row); echo "<br>"; }?>
Listagem 8. Banco de dados SQLite orientado a objetos

ODBC

ODBC é uma API que permite a conexão com qualquer banco de dados, seja ele local ou remoto. Para conectar a um banco ODBC utilizamos o método odbc_connect(), que deve receber quatro parâmetros: nome do banco, nome do usuário, senha e tipo de cursor (opcional).

Depois de conectado podemos utilizar a função odbc_exec() para executarmos comandos SQL em nosso banco. Veja na Listagem 9 como usar esses métodos.

<?php $conn = odbc_connect('banco','devmedia','devmedia'); $sql = "SELECT * FROM customers"; $rs = odbc_exec($conn , $sql); odbc_close($conn); // Fecha a conexão com o banco ?>
Listagem 9. Conexão com o ODBC

Na Listagem 10 vamos mostrar um exemplo de utilização da conexão com o ODBC para imprimir em uma página web o retorno de uma consulta ao banco.

<html> <body> <?php $conn = odbc_connect('nomebanco','nomeusuario','senha') or die('Falha na Conexão '); $sql = 'select * from customers'; $rs = odbc_exec($conn, $sql) or die('Erro no sql'); echo "<table><tr>"; echo "<th>Nome</th>"; echo "<th>Profissao</th></tr>"; 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>
Listagem 10. Exemplo ODBC

PHP Data Objects (PDO)

O PDO é uma camada de abstração de acesso a dados que traz como principal característica a possibilidade de migração de um banco de dados para outro. Para isso utiliza métodos de manipulação de dados que são independentes de qualquer SGDB. Dessa forma, o método que efetua uma consulta em um banco Oracle será o mesmo para o MySQL, e assim por diante.

O PHP Data Objects é uma funcionalidade disponível a partir do PHP 5.1 e é compatível com vários bancos de dados, dentre eles estão: SQL Server, Firebird/Interbase, MySQL, Oracle, ODBC, PostgreSQL, SQLite, Informix, IBM/DB2 e CUBRID.

Deve ser utilizado em projetos que utilizam mais de um banco ou que exige compatibilidade com outro SGBD, no entanto, não é aconselhável em aplicações bem definidas onde se tem clareza sobre o SGBD utilizado, pois o PDO acaba tendo como desvantagem a falta de velocidade ao ser comparado com outros bancos, como o MySQL.

Habilitando o PDO

O primeiro passo é a habilitação do seu drive, e para isso deve-se abrir o arquivo php.ini e remover o ponto e virgula (;) que comenta as linhas. Para o Windows use:

extension=php_pdo.dll extension=php_pdo_mysql.dll

E para o Linux:

extension=pdo.so extension=pdo_mysql.so

O PDO é puramente orientado a objetos, dessa forma, a criação de uma nova conexão com o banco de dados se dá pela criação de uma instância da classe PDO, como mostrado na Listagem 11.

<?php // MySQL $db1 = new PDO("mysql:host=localhost;dbname=banco", "root", "senha"); // PostgreSQL $db2 = new PDO("pgsql:host=localhost;dbname=banco", "root", "senha"); // SQLite $db3 = new PDO("sqlite:banco.sqlite"); //Firebird $db4 = new PDO(“firebird:dbname=nomebanco”, “SYSDBA”, “masterkey”); //Oracle $host = 'localhost'; $porta = '1521'; $usuario = 'root'; $senha = 'root'; $db5 = new PDO("oci:dbname=//$host:$porta",$usuario,$senha); ?>
Listagem 11. Criação de uma conexão utilizando PDO

Veja Que criamos cinco variáveis que recebem a instância da classe PDO para cada um dos tipos de bancos que queremos conectar, respectivamente, com o MySQL, PostgreSQL, SQLite, Firebird e Oracle.

Para encerrarmos uma conexão devemos usar o método unset, como na Listagem 12.

<?php // MySQL $db1 = new PDO("mysql:host=localhost;dbname=banco", "root", "senha"); unset($db1); // encerrando a conexão com o MySQL // PostgreSQL $db2 = new PDO("pgsql:host=localhost;dbname=banco", "root", "senha"); unset($db2); // encerrando a conexão com o PostgreSQL // SQLite $db3 = new PDO("sqlite:banco.sqlite"); unset($db3); // encerrando a conexão com o SQLite //Firebird $db4 = new PDO(“firebird:dbname=nomebanco”, “SYSDBA”, “masterkey”); unset($db4); // encerrando a conexão com o FIrebird //Oracle $host = 'localhost'; $porta = '1521'; $usuario = 'root'; $senha = 'root'; $db5 = new PDO("oci:dbname=//$host:$porta",$usuario,$senha); unset($db5); // encerrando a conexão com o Oracle ?>
Listagem 12. Criando e encerrando uma conexão com os bancos: MySQL PostgreSQL, SQLite, Firebird e Oracle com PDO

Na Listagem 13 vemos a criação de uma conexão com o SQL Server utilizando PDO.

<?php try { $hostname = "localhost"; $dbname = "nomebanco"; $username = "usuariobanco"; $password = "senha"; $pdo = new PDO ("mssql:host=$hostname;dbname=$dbname","$username","$password"); } catch (PDOException $e) { echo "Erro de Conexão " . $e->getMessage() . "<\br>"; exit; } unset($pdo); ?>
Listagem 13. Conectando ao SQL Server com PDO

PDO usando o ODBC para conectar o SQL Server

O Open Data Base Connectivity (ODBC) é uma estrutura criada com o objetivo de simplificar o acesso das aplicações com o banco de dados. Para utilizar o ODBC devemos seguir três passos. Inicialmente devemos ter uma aplicação ODBC instalada, sendo as mais conhecidas o Microsoft Acess e o Visual Basic. O segundo passo é possuir um driver ODBC e o terceiro é possuir um banco de dados real.

Na Listagem 14 criamos uma nova conexão com o banco de dados real o SQL Server.

* # Usuário: Devmedia # Banco: pdobanco # Server: PC\SQLEXPRESS # Senha: devmedia # Nome da tabela: autor # Driver usado ODBC DSN */ try { // Conexão $banco = new PDO("odbc:Driver={SQL Server};Server=PC\SQLEXPRESS;Database=pdobanco; Uid=sa;Pwd=devmedia;"); /* Insert no banco */ $executa = $banco->query("INSERT INTO autor (id, nome) VALUES ('', 'jose')"); if($executa){ echo 'Dados inseridos com sucesso!'; } else{ print_r($pdo->errorInfo()); } ?>
Listagem 14. ODBC com SQL Server

Depois que estabelecemos uma conexão com um banco de dados, o PDO nos fornece os métodos para manipulação do banco (inserção, criação, exclusão, etc.), para isso utilizamos a linguagem SQL.

Na Listagem 15 utilizaremos o método exec, que possibilita a execução de código SQL junto ao nosso banco para criar uma tabela de funcionários com os campos, id, nome, e-mail e cargo.

<?php $db = new PDO("mysql:host=localhost;dbname=banco", "root", ""); $db->exec("CREATE TABLE funcionarios(id INT AUTO_INCREMENT, nome VARCHAR(255), email VARCHAR(255), cargo VARCHAR(255)) "); ?>
Listagem 15. Implementando e utilizando o método exe

Para fazermos consultas utilizamos o método query, que executa o comando SQL SELECT, como mostra a Listagem 16.

<?php $db = new PDO("mysql:host=localhost;dbname=banco", "root", ""); $dados = $db->query("SELECT * FROM funcionarios"); ?>
Listagem 16.Fazendo uma consulta ao banco

Artigos relacionados