Académique Documents
Professionnel Documents
Culture Documents
www.fgsl.eti.br
Permitidaalivrereproduoecpiadesdequecitadaafonte
Nossa Agenda: O desenvolvimento de uma aplicao em PHP com acesso a banco de dados utilizando o editor Eclipse com plugin PDT e a biblioteca de classes Zend Framework.
Arsenal Mnimo: Apache 2.2.3 + com mod_rewrite PHP 5.1.4 + Zend Framework 1.5.0 + Eclipse 3.3.2 Plugin PDT 1.0.3 Multiplataforma: Linux/Windows
Usaremos aqui: Apache 2.2.9 + com mod_rewrite PHP 5.2.6 + Zend Framework 1.6.2 Eclipse 3.3.2 Plugin PDT 1.0.3 MySQL 5.0.67 Sistema operacional: Ubuntu
DesenvolvimentoRpidocomZendFrameworkeEclipse
Para exibir as linhas do arquivo: na barra esquerda do editor marque Show Line Numbers
DesenvolvimentoRpidocomZendFrameworkeEclipse
Janelas teis:
PHP Explorer: rvore hierrquica do projeto. Outline: Navegao rpida dos componentes do arquivo selecionado. PHP Project Outline: Navegao rpida por todos os componentes do projeto. PHP Functions: Referncia da linguagem.
DesenvolvimentoRpidocomZendFrameworkeEclipse
DesenvolvimentoRpidocomZendFrameworkeEclipse
DesenvolvimentoRpidocomZendFrameworkeEclipse
DesenvolvimentoRpidocomZendFrameworkeEclipse
DesenvolvimentoRpidocomZendFrameworkeEclipse
Zend Framework
DesenvolvimentoRpidocomZendFrameworkeEclipse
Zend Framework: Arquitetura Autenticao e Autorizao Bancos de Dados Diagnstico e Manuteno Filtragem e Validao Formulrios Dinmicos Infra-estrutura
Zend Framework: Arquitetura Internacionalizao Mail Model-View-Controller (MVC) Performance Busca Segurana Web Services
DesenvolvimentoRpidocomZendFrameworkeEclipse
O que precisa ser configurado? O arquivo httpd.conf do Apache, se for usado o MVC do ZF (nosso caso). O arquivo php.ini com a extenso do banco de dados a ser utilizado (neste caso, pdo_mysql) se o PHP j no tiver sido compilado com ela.
httpd.conf
1: Configurao da permisso de sobrescrita das configuraes do httpd.conf por arquivos .htaccess <Directory "[caminho definido em DocumentRoot"> Options FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory>
httpd.conf 2: Os mdulos: seo Dynamic Shared Object (DSO) Support LoadModule rewrite_module modules/mod_rewrite.so
Vamos fazer uma aplicao em trs tempos (ou trs camadas)? Demorou!
Zend_DB Uma viagem, da abstrao da conexo at um acesso ao banco de dados totalmente orientado a objetos. E um passeio por vrios padres de projeto!
Firebird IBM DB2 Interbase MySQL Microsoft SQL Server Oracle PostgreSQL SQLite
require_once('Zend/Db/Adapter/Pdo/Mysql.php'); $db=newZend_Db_Adapter_Pdo_Mysql(array( 'host' =>'127.0.0.1', 'username' =>'usuario', 'password' =>'12345', 'dbname' =>'escola' ));
require_once('Zend/Db.php'); /*Carregaautomaticamenteaclasse Zend_Db_Adapter_Pdo_Mysql *ecriaumainstnciadela. */ $db=Zend_Db::factory('Pdo_Mysql',array( 'host' =>'127.0.0.1', 'username' =>'usuario', 'password' =>'12345', 'dbname'=>'escola' ));
require_once('Zend/Db.php'); /*Carregaautomaticamenteaclasse MyProject_Db_Adapter_Pdo_Mysqlecriauma instnciadela.*/ $db=Zend_Db::factory('Pdo_Mysql',array( 'host'=>'127.0.0.1', 'username'=>'usuario', 'password'=>'12345', 'dbname'=>'escola', 'adapterNamespace'=>'MyProject_Db_Adapter' ));
Ainda podemos carregar a configurao do banco de um arquivo externo, usando as classes filhas de Zend_Config: Zend_Config_Ini e Zend_Config_Xml
Zend_Config_Ini, com sua simplicidade: require_once('Zend/Db.php'); require_once('Zend/Config/Ini.php'); $config=new Zend_Config_Ini('config.ini','database'); $db=Zend_Db::factory( $config>db>adapter, $config>db>config>toArray() );
Zend_Config_Xml, com sua versatilidade: require_once('Zend/Db.php'); require_once('Zend/Config/Xml.php'); $config=new Zend_Config_Xml('config.xml','development'); $db=Zend_Db::factory( $config>db>adapter, $config>db>config>toArray() );
A CONEXO COM O BANCO IMEDIATA? Voc quer saber se na hora em que criar a instncia de Zend_Db ser feita a conexo e um atributo protegido em algum lugar receber um tipo resource? A resposta NO. A conexo feita sob demanda, a partir da primeira consulta ao banco. Para forar a conexo, use o mtodo getConnection()
Obtendo registros na forma de matrizes com o mtodo fetchAll() O resultado de fetchAll() por padro uma matriz de duas dimenses, onde a primeira equivale aos registros e a segunda aos campos. Na segunda, as chaves dos elementos so os nomes dos campos, se nada for dito em contrrio. Esse ltimo detalhe pode ser configurado com o mtodo setFetchMode(), usando as constantes Zend_Db::FETCH...
Obtendo somente a primeira coluna de uma consulta Se quiser somente a primeira coluna de uma consulta (o primeiro campo especificado na consulta, ou o primeiro definido na tabela), use o mtodo fetchCol(). Ele retornar uma matriz uma dimenso. Para cada elemento, a chave o nmero ordinal do registro na consulta (no na tabela) e o valor contedo do campo.
Obtendo somente a primeira linha de uma consulta Se quiser somente a primeira linha de uma consulta (o primeiro registro retornado pela mesma), use o mtodo fetchRow(). Ele retornar uma matriz com uma dimenso. Para cada elemento, a chave o nome (ou o ordinal) do campo e o valor o contedo do mesmo.
Incluso de registros
Pergunta:
E se ao invs de colocar um valor diretamente, eu queira atribuir ao campo o valor de retorno de uma funo do banco? SEM PROBLEMAS! Use uma instncia de Zend_Db_Expr e passe a funo como parmetro para o construtor.
<?php $data=array( 'created_on'=>newZend_Db_Expr('CURDATE()'), 'bug_description'=>'Somethingwrong', 'bug_status'=>'NEW' ); $db>insert('bugs',$data);
Pergunta:
Atualizao de registros:
Remoo de registros:
O contedo de campos do tipo texto em SQL cerceado por apstrofos. Como isso pode gerar uma confuso com os apstrofos, a classe Zend_Db fornece o mtodo quote(), que envolve o texto com os mesmos.
Controle de Transaes
Encerrando a Conexo
Normalmente no necessrio fechar uma conexo de banco de dados. PHP automaticamente elimina todos os recursos e finaliza uma requisio. Extenses de bancos de dados so desenhadas para fechar a conexo assim que a referncia para o objeto de recurso seja eliminada.
Encerrando a Conexo
$db>closeConnection();
Zend_Db_Rowset a partir de Zend_Db_Table As consultas feitas com os mtodos fetchAll() e find() retornam objetos Zend_Db_Rowset. O mtodo find() faz buscas diretamente pela chave primria. Se um valor simples for passado como parmetro, ele retorna um objeto Zend_Db_Rowset com somente um objeto Zend_Db_Row. Se for passado uma matriz de valores, sero retornados tantos objetos Zend_Db_Row quantos os cujas chaves primrias combinarem com as da matriz.
Quando o objeto Zend_Db_Row recuperado atravs de uma consulta, ele retorna com os dados do banco naquele momento. Atualizaes no banco no so propagadas automaticamente para o objeto. Para carregar o objeto com os dados atualizados, use o mtodo refresh().
$profiler=$db>getProfiler(); Isso retorna uma instncia de objeto Zend_Db_Profiler. Com essa instncia, o desenvolvedor pode examinar suas consultas usando uma variedade de mtodos:
getTotalElapsedSecs() retorna o nmero total de segundos transcorridos para todas as consultas executadas.
getLastQueryProfile() retorna o ltimo (mais recente) perfil de consulta, no obstante a consulta tenha ou no terminado. (se no tiver, a hora de trmino ser nula)
O valor de retorno de getLastQueryProfile() e os elementos individuais de getQueryProfiles() so objetos Zend_Db_Profiler_Query, que provem a habilidade de inspecionar as consultas individuais por elas mesmas: getQuery() retorna o texto SQL da consulta. O texto SQL de uma declarao preparada com parmetros o texto no momento em que a consulta for preparada, assim ela contm espaos reservados para valores de parmetro, no os valores usados quando a declarao executada.
getQueryParams() retorna um vetor de valores de parmetro usados quando executar uma consulta preparada. Isso inclui tanto parmetros de combinao quanto argumentos para o mtodo execute() de declarao. As chaves do vetor so ndices de parmetro posicionais (baseados em 1) ou nomeados (string).
getElapsedSecs()
Terei que fazer tudo isso? Pode usar o projeto mnimo pra comear, ele est disponvel em www.fgsl.eti.br. Lembre-se de que apenas um dos layouts possveis para uma aplicao.
Contato: flaviogomesdasilva@yahoo.com.br
FOIUMA GRANDE HONRA!