Optando pela versatilidade, o exemplo explica a conexão de um banco de dados a partir do arquivo de inicialização application.ini da estrutura do zend framework, que define as configurações básicas do software/site. Através dessa lógica definimos um adaptador PDO específico de acordo com o banco de dados utilizado (Mysql, MS SQL Server ou PostgreSQL) que integra-se a um módulo padronizado de classes e métodos que faz a conexão ser realizada. Veja a seguir os passos utilizados para definir essa conexão: Entre no arquivo application.ini dentro da pasta application/config e defina as seguintes configurações abaixo da parâmetro [production]:
MySQL
resources.db.adapter = “PDO_MYSQL”
resources.db.params.host = “ENDEREÇO DO SERVIDOR”
resources.db.params.username = “LOGIN DO BANCO DE DADOS”
resources.db.params.dbname = “NOME DO BANCO DE DADOS”
resources.db.params.password = “SENHA DO BANCO DE DADOS”
resources.db.params.charset = “TIPO DE CODIFICAÇÃO DO BANCO (EX.: utf8)”
resources.db.params.isDefaultTableAdapter = true
MS SQL SERVER
resources.db.adapter = “PDO_MSSQL”
resources.db.params.pdoType = “dblib”
resources.db.params.host = “ENDEREÇO DO SERVIDOR”
resources.db.params.username = “LOGIN DO BANCO DE DADOS”
resources.db.params.dbname = “NOME DO BANCO DE DADOS”
resources.db.params.password = “SENHA DO BANCO DE DADOS”
resources.db.isDefaultTableAdapter = “true”
PostGreSQL
resources.db.adapter = “PDO_PGSQL”
resources.db.params.host = ” ENDEREÇO DO SERVIDOR”
resources.db.params.username = “LOGIN DO BANCO DE DADOS”
resources.db.params.dbname = “NOME DO BANCO DE DADOS”
resources.db.params.password = ” SENHA DO BANCO DE DADOS”
resources.db.isDefaultTableAdapter = true
Exemplo
Gostaria de ver um exemplo real? Veja abaixo como o código foi desenvolvido para se conectar ao banco de dados MySQL:
Para capturar os dados dessa conexão criada, basta utilizar o comando abaixo que pode ser empregado em qualquer classe do controlador IndexController.php localizado no caminho application/controllers/ :
$db = Zend_Db_Table::getDefaultAdapter();
IMPORTANTE: O comando acima funcionará a partir da versão 1.8 do zend framework e é essencial o uso do parâmetro ”’resources.db.isDefaultTableAdapter = "true" no arquivo "application.ini"
Possíveis erros de conexão
Esse tipo de erro é muito comum ocorrer para versões inferiores a 1.8 que utilizam o comando Zend_Db_Table::getDefaultAdapter(); para conectar-se ao banco de dados. Nesses casos a solução pode ser dada por meio de uma conexão através da Factory, aplicado em qualquer classe de seu controlador. Veja os exemplos a seguir:
Factory MySQL
Factory MS SQL Server
Factory PostGreSQL
Para maiores informações, veja a documentação da classe Zend_Db_Adapter no site oficial do Zend Framework.
Veja também
Por que usar PDO?
Antes da chegada do PDO, a linguagem PHP oferecia suporte à comunicação com diferentes modelos de SGBD através de módulos específicos. A maioria deles provia uma biblioteca de funções e utilizava um resource para representar a conexão e outro para representar um resultset (o resultado de uma consulta). As operações eram feitas sobre as variáveis de resource.
Cada driver implementava suas operações conforme imaginavam ser mais adequados. Embora alguns deles tivessem um funcionamento semelhante, a ordem dos parâmetros nem sempre era a mesma e podia causar uma certa confusão entre programadores.
Como conectar a um banco MySQL usando PDO
Testando a conexão
<?php $banco = new PDO('mysql:host=localhost;dbname=nome_do_banco', 'username','password')or print (mysql_error()); print "Conexão Efetuada com sucesso!"; ?>
Incluir dados
<?php $banco = new PDO('mysql:host=localhost;dbname=nome_do_banco', 'username','password'); $novo_cliente = array('nome'=>'José','departamento'=>'TI','unidade'=>'Paulista'); $banco->prepare('INSERT INTO clientes (nome,departamento,unidade) VALUES (:nome,:departamento,:unidade)')->execute($novo_cliente); ?>
Pesquisando dados em base MySQL utilizando querys simples e stored procedures
Neste exemplo, é possível efetuar pesquisas em bases MySQL utilizando querys e stored procedures. Lembrando que para evitar conflitos, teste sua procedure antes de implementá-la em sua aplicação.
Arquivo: ProcedurePDO.php
<?php //Dados de acesso $host = "Nome_do_Host"; $dbn = "Nome_da_Base"; $user = "Nome_do_Usuário"; $pass = "Senha_da_Base"; $tabela = "Nome_da_Tabela"; try { //Conectar $ligacao = new PDO("mysql:dbname=$dbn; host=$host", $user, $pass); $ligacao->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //Em caso de pesquisas, via procedures //$pesq = ""; //$sql = "CALL Nome_da_procedure()"; //Em caso de querys $pesq = "Nome_do_Campo"; $sql = "SELECT * FROM $tabela WHERE nome= :nome_param"; $resultados = $ligacao->prepare($sql); //Definição de parâmetros $resultados->bindParam(":nome_param", $pesq, PDO::PARAM_STR); $resultados->execute(); echo'<p>'.$sql.'</p><hr>'; foreach($resultados as $linha) { echo '<p>'; //Nome do campo na tabela pesquisada echo $linha["Nome_da_Coluna"]; echo '</p>'; } echo '<hr><p>Resultados: '.$resultados->rowCount().'</p>'; //Desconectar $ligacao = null; } catch(PDOException $erro) { echo $erro->getMessage(); } ?>
Como conectar a um banco SQL Server usando PDO
Arquivo: PDO_SQLserver.php
<?php try { $hostname = "sqlserver01.bancodedados.com"; $dbname = "nomebanco"; $username = "nomebanco"; $pw = "senha"; $pdo = new PDO ("mssql:host=$hostname;dbname=$dbname","$username","$pw"); } catch (PDOException $e) { echo "Erro de Conexão " . $e->getMessage() . "/n"; exit; } $query = $pdo->prepare("select Coluna FROM nome_tabela"); $query->execute(); for($i=0; $row = $query->fetch(); $i++){ echo $i." - ".$row['Coluna']."<br/>"; } unset($pdo); unset($query); ?>
Arquivo: PDO_SQLserver.php
<?php try { $hostname = "sqlserver01.bancodedados.com"; $dbname = "nomebanco"; $username = "nomebanco"; $pw = "senha"; $pdo = new PDO ("dblib:host=$hostname;dbname=$dbname","$username","$pw"); } catch (PDOException $e) { echo "Erro de Conexão " . $e->getMessage() . "/n"; exit; } $query = $pdo->prepare("select Coluna FROM nome_tabela"); $query->execute(); for($i=0; $row = $query->fetch(); $i++){ echo $i." - ".$row['Coluna']."<br/>"; } unset($pdo); unset($query); ?>
Veja também
- Conectando-se ao Postgre usando PDO
- Como alterar as diretivas do PHP
- Módulos PHP
- PHP em Plataforma Windows
- Criar Stored Procedures no PhpMyAdmin