Usando o Zend_Db para conectar no MySql Um pouco mais de como usar o Zend_Db_Select

Usando o Zend_Db_Select para abstração de consultas

0 comments
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:

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

$config = new Zend_Config(
    array(
        'database' => array(
            'adapter' => 'Mysqli',          // Adaptador
            'params'  => array(
                'host'     => 'localhost',  // Host de conexão
                'dbname'   => 'zendbrasil', // Base de dados
                'username' => 'livro',      // Login
                'password' => '',           // Senha
            )
        )
    )
);

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

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

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

A sintaxe básica do select é:

// Criar uma instancia do Zend_Db_Select
 $select = $db->select();
// Adicionando a cláusula from
$select->from( ...tabelas e colunas... )
// Os critérios
$select->where( ...critérios... )
// A Ordem
$select->order( ...Ordem da resposta... );
Então 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';

$config = new Zend_Config(
    array(
        'database' => array(
            'adapter' => 'Mysqli',          // Adaptador
            'params'  => array(
                'host'     => 'localhost',  // Host de conexão
                'dbname'   => 'zendbrasil', // Base de dados
                'username' => 'livro',      // Login
                'password' => '',           // Senha
            )
        )
    )
);

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

$select = $db->select();
$select->from('teste');
$stmt = $select->query();
$result = $stmt->fetchAll();

echo '<pre>';
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
        )
)
Related Posts with Thumbnails

Leave a Reply