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












