Usando o Zend_Db_Select para abstração de consultas

/* Este post é continuação do Usando o Zend_Db para conectar no MySql */

Vimos no post anterior que para se conectar com banco de dados através do Zend_Db é necessário configuração através do  o Zend_Config. Mais neste mesmo post somente mostrei como conectar e usar sintaxes de MySql. Mais se seu sistema ser multi-banco terá que abstrair as consultas de modo que o próprio Zend faça o trabalho de criar as Querys.

É ai que entra o Zend_Db_Select que faz o trabalho de criar as querys conforme o banco de dados selecionado. Então a conexão continua igual a anterior, conforme abaixo:

<?php
require_once 'Zend/Config.php';
require_once 'Zend/Db.php';

$params ['host']      = 'localhost';
$params ['dbname']    = 'zendbrasil';
$params ['username']  = 'root';
$params ['password']  = '';
$database ['adapter'] = 'Mysqli';
$database ['params']  = $params;
$data ['database']    = $database;

$config = new Zend_Config ( $data );

$db = Zend_Db::factory($config->database);

Vamos agora pensar no mesmo exemplo que tínhamos, mais agora migrar do fetchAll para o select.

<?php
$sql = "SELECT * FROM `teste` ";
$result = $db->fetchAll($sql);

A sintaxe básica do select é:

<?php
// Criar uma instancia do Zend_Db_Select
 $select = $db->select();
// Adicionando a cláula from
$select->from( ...tabelas e colunas... )
// Os critéros
$select->where( ...critérios... )
// A Ordem
$select->order( ...Ordem da resposta... );
Entãa consulta acima fica assim:
$select = $db->select();
$select->from('teste');

$stmt = $select->query();
$result = $stmt->fetchAll();

Agora podemos apenas alterando o Zend_Config conectar fazer esta consulta em qualquer banco de dados que o Zend_Db tenha suporte.

O método $select->query(); retorna o sql montada segundo os padrões.

Veja parte do print_r do $stmt:

Zend_Db_Statement_Mysqli Object
(
    [_keys:protected] => Array
        (
            [0] => USUARIO_ID
            [1] => USUARIO_NOME
        )
    [_values:protected] => Array
        (
            [0] => 4
            [1] => Usuario 4
        )
....................
    [_sqlSplit:protected] => Array
        (
            [0] => SELECT `teste`.* FROM `teste`
        )

    [_sqlParam:protected] => Array
        (
            [0] => SELECT `teste`.* FROM `teste`
        )
)

Então nela executamo o método fetchAll() que retorna a consulta.

<?php
require_once 'Zend/Config.php';
require_once 'Zend/Db.php';
$params ['host']      = 'localhost';
$params ['dbname']    = 'zendbrasil';
$params ['username']  = 'root';
$params ['password']  = '';
$database ['adapter'] = 'Mysqli';
$database ['params']  = $params;
$data ['database']    = $database;

$config = new Zend_Config ( $data );
$db     = Zend_Db::factory($config->database);
$select = $db->select();
$select->from('teste');
$stmt   = $select->query();
$result = $stmt->fetchAll();

print_r($result);

A resposta será:

Array
(
    [0] => Array
        (
            [USUARIO_ID] => 1
            [USUARIO_NOME] => Usuario 1
        )

    [1] => Array
        (
            [USUARIO_ID] => 2
            [USUARIO_NOME] => Usuario 2
        )

    [2] => Array
        (
            [USUARIO_ID] => 3
            [USUARIO_NOME] => Usuario 3
        )

    [3] => Array
        (
            [USUARIO_ID] => 4
            [USUARIO_NOME] => Usuario 4
        )
)

Fique por dentro de nossas novidades, ideias e atualizações