Desenvolvendo em Zend Framework Ênfase no Zend_Db



Documentos relacionados
AULA 4 VISÃO BÁSICA DE CLASSES EM PHP

PHP Conference Brasil

Programação Orientada a Objetos com PHP & MySQL Cookies e Sessões. Prof. MSc. Hugo Souza

INSTALAÇÃO OASIS + WAMP SERVER NO AMBIENTE WINDOWS

Iniciando o MySQL Query Brower

Desenvolvendo Websites com PHP

Como gerar arquivos para Sphinx Operador

Instalando o Lazarus e outros sistemas de suporte. Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2011

INSTALANDO E CONFIGURANDO O MY SQL

Manual de Instalação e Configuração do SQL Express

UFSM COLÉGIO AGRÍCOLA DE FREDERICO WESTPHALEN CURSO SUPERIOR DE TECNOLOGIA EM SISTEMAS PARA INTERNET. Programação para Internet I

Principais Comandos SQL Usados no MySql

Programação WEB. Prof. André Gustavo Duarte de Almeida docente.ifrn.edu.br/andrealmeida. Aula III Introdução PHP

JDBC Java Database Connectivity

Manual Técnico Sistema Rede das Redes. Ver 1.0

Noções de. Microsoft SQL Server. Microsoft SQL Server

Os dados no MySQL são armazenado em tabelas. Uma tabela é uma colecção de informação relacionada e consiste em colunas e linhas.

Integração entre o IBM HTTP SERVER, APACHE WEB Server e IBM Websphere Application Server

Revisão: Introdução. - Integração com o AutoManager; 1 Atualização de versão do banco de dados PostgreSQL

Desenvolvimento orientado a objetos com PEAR: DB/MDB2, DB_DataObject, HTML_QuickForm e DB_DataObjectFormBuilder

Polycom RealPresence Content Sharing Suite Guia rápido do usuário

MANUAL DE FTP. Instalando, Configurando e Utilizando FTP

PHP (Seções, Cookies e Banco de Dados)

Instalando o WordPress em localhost

AVG Admin 2012 SQL Server 2005 Express

Manual AGENDA DE BACKUP

LINGUAGEM DE PROGRAMAÇÃO WEB

Introdução a listas - Windows SharePoint Services - Microsoft Office Online

CONFIGURAÇÃO MINIMA EXIGIDA:

Smart Laudos 1.9. A Forma Inteligente de Criar seus Laudos Médicos. Manual do Usuário

Ambiente Web PHP Problemas Frameworks CakePHP Symfony Zend Framework Prado CodeIgniter Demonstração O livro

Manual do PolicyKit-kde. Daniel Nicoletti Tradução: Luiz Fernando Ranghetti

Conteúdo. Disciplina: INF Engenharia de Software. Monalessa Perini Barcellos. Centro Tecnológico. Universidade Federal do Espírito Santo

Gravando uma Áudio Conferência

Recursos avançados e Orientação a Objetos no PHP

STK (Start Kit DARUMA) Extensão PHP para DarumaFrameWork

Criando Aplicações PHP com. Zend e Dojo. Flávio Gomes da Silva Lisboa. Novatec

Aplicativo web para definição do modelo lógico no projeto de banco de dados relacional

2 echo "PHP e outros.";

WEBDESIGN. Professor: Paulo Trentin Escola CDI de Videira

Tutorial de Matlab Francesco Franco

UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE ESCOLA AGRÍCOLA DE JUNDIAÍ EAJ - PRONATEC / REDE etec MÓDULO III DESENVOLVIMENTO PROFESSOR ADDSON COSTA

INSTALAÇÃO DO SISTEMA CONTROLGÁS

Criando Banco de Dados, Tabelas e Campos através do HeidiSQL. Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2011

Programação Orientada a Objetos com PHP & MySQL Sistema Gerenciador de Banco de Dados: Introdução e configuração de bases de dados com Postgre e MySQL

Trabalho de Sistema de Informações. Instalação e configuração aplicativo Ocomon

MDaemon GroupWare. Versão 1 Manual do Usuário. plugin para o Microsoft Outlook. Trabalhe em Equipe Usando o Outlook e o MDaemon

Guia de instalação para ambiente de Desenvolvimento LINUX

Manipulação de Banco de Dados com Java. Ms. Bruno Crestani Calegaro Maio/ 2015

Introdução ao Tableau Server 7.0

Ambiente Web PHP Problemas Frameworks CakePHP Symfony Zend Framework Prado CodeIgniter Demonstração

Curso de Aprendizado Industrial Desenvolvedor WEB

Lazarus pelo SVN Linux/Windows

Construtor de sites SoftPixel GUIA RÁPIDO - 1 -

TUTORIAL: MANTENDO O BANCO DE DADOS DE SEU SITE DENTRO DO DOMÍNIO DA USP USANDO O SSH!

PHP INTEGRAÇÃO COM MYSQL PARTE 2

PHP - Orientação a Objeto MVC. Éderson T. Szlachta {Tecnólogo em Análise e Desenv. de Sistemas} - edersonszlachta@gmail.com

Microsoft Access: Criar relações para um novo banco de dados. Vitor Valerio de Souza Campos

NetEye Guia de Instalação

SISTEMA TYR DIAGRAMAS DE CLASSE E SEQUÊNCIA Empresa: Academia Universitária

TELA PRINCIPAL. Exibe uma lista de configurações de efeitos disponíveis. A visualização pode ser filtrada por: Aplicação, Cliente e Categoria.

Barra de ferramentas padrão. Barra de formatação. Barra de desenho Painel de Tarefas

8. Outros tipos de Transação (Modo de Transação de Autoconfirmação e Modo Implícito)

Persistência e Banco de Dados em Jogos Digitais

Capítulo 7 O Gerenciador de Arquivos

1 Inicie um novo. Guia de Referência Rápida de Gerenciamento de Projeto para o Project projeto

Polycom RealPresence Content Sharing Suite Guia rápido do usuário

Estação Digital. Instalação do Gerenciador da Estação Digital

Conceitos de extensões Joomla!

Introdução ao PHP. Prof. Késsia Marchi

No Fedora, instalamos os pacotes "mysql" e "mysql-server", usando o yum:

Versão Melhorias Melhorias Versão 6.0.1

AP_ Conta Aplicativo para digitação e envio de contas médicas no padrão TISS

CA Nimsoft Monitor. Guia do Probe Monitoramento de resposta de JDBC. jdbc_response série 1.1

SAMUEL SEAP INFORMÁTICA. Rua Lúcio José Filho, 27 Parque Anchieta Tel:

Sumário 1. SOBRE O NFGoiana DESKTOP Apresentação Informações do sistema Acessando o NFGoiana Desktop

Questão Essência do Excel

3. No painel da direita, dê um clique com o botão direito do mouse em qualquer espaço livre (área em branco).

Sumário. Capítulo 1 Revisão de PHP Capítulo 2 Melhorando o processamento de formulários... 46

Instalação Apache + MySQL + PHPMyAdmin CentOS

Transações Seguras em Bancos de Dados (MySQL)

INSTALAÇÃO DO MICROSOFT WINDOWS SHAREPOINT SERVICES 2.0

1 Criar uma entity a partir de uma web application que usa a Framework JavaServer Faces (JSF)

Manual AGENDA DE BACKUP

Faculdade de Tecnologia SENAC Goiás. Disciplina: Gerenciamento de Rede de Computadores. Goiânia, 16 de novembro de 2014.

APOSTILA BANCO DE DADOS INTRODUÇÃO A LINGUAGEM SQL

Guia de Início Rápido

CRIANDO TEMPLATES E LEGENDAS

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

Está apto a utilizar o sistema, o usuário que tenha conhecimentos básicos de informática e navegação na internet.

Desenvolvendo plugins WordPress usando Orientação a Objetos

EXEMPLO DE COMO FAZER UMA MALA DIRETA

BANCO DE DADOS: SQL. Edson Anibal de Macedo Reis Batista. 27 de janeiro de 2010

Prática 6 ActionScript

Introdução a PHP (Um Programa PHP)

Transcrição:

Ênfase no Zend_Db www.fgsl.eti.br Permitidaalivrereproduçãoecópiadesdequecitadaafonte

FLÁVIO GOMES DA SILVA LISBOA BACHAREL EM CIÊNCIA DA COMPUTAÇÃO ANALISTA DE DESENVOLVIMENTO DE SISTEMAS SERVIÇO FEDERAL DE PROCESSAMENTO DE DADOS (SERPRO) ELABOROU O PROGRAMA DE TREINAMENTO EM PHP DA EMPRESA É AUTOR DO LIVRO ZEND FRAMEWORK DESENVOLVENDO EM PHP 5 ORIENTADO A OBJETOS COM MVC

Nossa Agenda: O desenvolvimento de uma aplicação em PHP com acesso a banco de dados utilizando o editor Eclipse com plugin PDT e a biblioteca de classes Zend Framework.

Arsenal Mínimo: 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

Por que não Eclipse 3.4? Aguarde PDT 2.0, uma nova versão para um novo ano!

Editando um arquivo PHP no Eclipse

Editando um arquivo PHP no Eclipse Auto-complete (plugin PDT): Ativado pela digitação (forçado pelas teclas CTRL + barra de espaços); Filtro dinâmico por texto parcial; Mostra descrição, parâmetros e valor de retorno; Templates de blocos de código (if, while, for, function).

Editando um arquivo PHP no Eclipse Auto-complete - Vantagens: Acelera a digitação; Evita erros de sintaxe; Provê acesso rápido a informações básicas sobre funções; Reproduz inclusive as estruturas criadas pelo usuário, como variáveis e classes.

DesenvolvimentoRápidocomZendFrameworkeEclipse Editando um arquivo PHP no Eclipse Teclas úteis: Localizar/Substituir: CTRL+F Ir para uma linha: CTRL+L Completar a palavra: ALT + / Busca/Abertura rápida de arquivo, mesmo oculto: SHIFT+CTRL+R Para exibir as linhas do arquivo: na barra à esquerda do editor marque Show Line Numbers

DesenvolvimentoRápidocomZendFrameworkeEclipse Janelas Úteis: PHP Explorer: Árvore hierárquica do projeto. Outline: Navegação rápida dos componentes do arquivo selecionado. PHP Project Outline: Navegação rápida por todos os componentes do projeto. PHP Functions: Referência da linguagem.

DesenvolvimentoRápidocomZendFrameworkeEclipse PHP em mãos erradas SinestrocreatedbyJohnBroome andgilkanein1961 DCComicsAllRightsReserved

DesenvolvimentoRápidocomZendFrameworkeEclipse Programador PHP Tradicional GreenLanternHal JordancreatedbyJohn BroromeandGilKanein 1959 DCComicsAllRights Reserved

DesenvolvimentoRápidocomZendFrameworkeEclipse Programador PHP Eventual DaffyDuckcreatedby TexAveryandBob Campettin1937 WarnerBrothersAll RightsReserved

DesenvolvimentoRápidocomZendFrameworkeEclipse Programador PHP Ideal RomcreatedbyDankman, RichardandMcCoyin1979 HasbroAllRightsReserved

Zend Framework DesenvolvimentoRápidocomZendFrameworkeEclipse Biblioteca de classes PHP Software livre e gratuito (licença amigável); Reutilizável; Extensível; Flexível; Simples; Evolução constante; Parceiros importantes;

DesenvolvimentoRápidocomZendFrameworkeEclipse Zend Framework: Arquitetura Dengeki Sentai Changeman. Toei,1985. CompanyAll Rights Reserved.

Zend Framework: Arquitetura Autenticação e Autorização Bancos de Dados Diagnóstico e Manutenção Filtragem e Validação Formulários Dinâmicos Infra-estrutura

Zend Framework: Arquitetura Internacionalização Mail Model-View-Controller (MVC) Performance Busca Segurança Web Services

DesenvolvimentoRápidocomZendFrameworkeEclipse Zend Framework: Arquitetura Firestormcreatedby GeryConwayand AlMilgromin1978 DCComicsAllRights Reserved

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 extensão do banco de dados a ser utilizado (neste caso, pdo_mysql) se o PHP já não tiver sido compilado com ela.

httpd.conf 1: Configuração da permissão de sobrescrita das configurações 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 módulos: seção Dynamic Shared Object (DSO) Support LoadModule rewrite_module modules/mod_rewrite.so

Vamos fazer uma aplicação em três tempos (ou três camadas)? Demorou!

Zend_DB Uma viagem, da abstração da conexão até um acesso ao banco de dados totalmente orientado a objetos. E um passeio por vários padrões de projeto!

Componente da vez: Zend_Db_Adapter Provê classes adaptadoras para as seguintes marcas de bancos de dados: ECOMO FUNCIONA, HEIN? Firebird IBM DB2 Interbase MySQL Microsoft SQL Server Oracle PostgreSQL SQLite Energizercreated bylouisesimonson andjunebrigmanin 1984 MarvelComics AllRightsReserved

Você pode usar o construtor! 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' ));

Você pode usar o padrão Factory! require_once('zend/db.php'); /*Carregaautomaticamenteaclasse Zend_Db_Adapter_Pdo_Mysql *ecriaumainstânciadela. */ $db=zend_db::factory('pdo_mysql',array( 'host' =>'127.0.0.1', 'username' =>'usuario', 'password' =>'12345', 'dbname'=>'escola' ));

Você pode usar sua classe adaptadora! require_once('zend/db.php'); /*Carregaautomaticamenteaclasse MyProject_Db_Adapter_Pdo_Mysqlecriauma instânciadela.*/ $db=zend_db::factory('pdo_mysql',array( 'host'=>'127.0.0.1', 'username'=>'usuario', 'password'=>'12345', 'dbname'=>'escola', 'adapternamespace'=>'myproject_db_adapter' ));

Você pode usar Zend_Config com Zend_Db! require_once('zend/db.php'); require_once('zend/config.php'); $config=newzend_config( array( 'database'=>array( 'adapter' =>'Mysqli', 'params' =>array( 'dbname' =>'escola', 'username'=>'usuario', 'password'=>'12345', 'host' =>'127.0.0.1' ) ) ) ); $db=zend_db::factory($config >database);

Você pode usar Zend_Config com Zend_Db! Ainda podemos carregar a configuração 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: Arquivo config.ini [database] db.adapter=pdo_mysql db.config.username=usuario db.config.password=12345 db.config.host=127.0.0.1 db.config.dbname=escola

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: Arquivo config.xml <?xmlversion="1.0"?> <configdata> <production> <webhost>www.escola.com</webhost> <db> <adapter>pdo_mysql</adapter> <config> <host>db.escola.com</host> <username>pro_user</username> <password>pro_secret</password> <dbname>escola</dbname> </config> </db> </production> <developmentextends="production"> <db> <config> <host>127.0.0.1</host> <username>usuario</username> <password>12345</password> </config> </db> </development> </configdata>

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 CONEXÃO COM O BANCO É IMEDIATA? Você quer saber se na hora em que criar a instância de Zend_Db será feita a conexão e um atributo protegido em algum lugar receberá um tipo resource? A resposta é NÃO. A conexão é feita sob demanda, a partir da primeira consulta ao banco. Para forçar a conexão, use o método getconnection()

Obtendo registros na forma de matrizes com o método fetchall() $sql='select*fromalunoswhereid>?'; $registros=$db >fetchall($sql,array(2));

Obtendo registros na forma de matrizes com o método fetchall() O resultado de fetchall() por padrão é uma matriz de duas dimensões, onde a primeira equivale aos registros e a segunda aos campos. Na segunda, as chaves dos elementos são os nomes dos campos, se nada for dito em contrário. Esse último detalhe pode ser configurado com o método 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 método fetchcol(). Ele retornará uma matriz uma dimensão. Para cada elemento, a chave é o número ordinal do registro na consulta (não na tabela) e o valor é conteúdo 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 método fetchrow(). Ele retornará uma matriz com uma dimensão. Para cada elemento, a chave é o nome (ou o ordinal) do campo e o valor é o conteúdo do mesmo.

Inclusão de registros $data=array( "nome"=>'peninha' ); $db >insert('alunos',$data);

Pergunta: E se ao invés de colocar um valor diretamente, eu queira atribuir ao campo o valor de retorno de uma função do banco? SEM PROBLEMAS! Use uma instância de Zend_Db_Expr e passe a função como parâmetro para o construtor. <?php $data=array( 'created_on'=>newzend_db_expr('curdate()'), 'bug_description'=>'somethingwrong', 'bug_status'=>'new' ); $db >insert('bugs',$data);

Pergunta: E se eu quiser saber qual o id do registro incluído? Use a função getlastinsertid()

Atualização de registros: $data=array( "nome"=>'gansolino' ); $where=$db >quoteinto('nome =?','Peninha'); $db >update('alunos',$data,$where);

Remoção de registros: $where=$db >quoteinto('nome =?','Gansolino'); $db >delete('alunos',$where);

O problema dos campos de texto O conteúdo de campos do tipo texto em SQL é cerceado por apóstrofos. Como isso pode gerar uma confusão com os apóstrofos, a classe Zend_Db fornece o método quote(), que envolve o texto com os mesmos.

Controle de Transações <?php $db >begintransaction(); try{ $db >query(...); $db >commit(); }catch(exception$e){ $db >rollback(); echo$e >getmessage(); }

Informações sobre as Tabelas $lista=$db >listtables(); foreach($listaas$table) { echo"<h1>tabela$table</h1>"; $campos=$db >describetable($table); foreach($camposas$nome=>$dados) { echo"<p><b>$nome</b><br>"; foreach($dadosas$chave=>$valor) { echo"$chave=$valor<br>"; } echo'</p>'; } }

Encerrando a Conexão Normalmente não é necessário fechar uma conexão de banco de dados. PHP automaticamente elimina todos os recursos e finaliza uma requisição. Extensões de bancos de dados são desenhadas para fechar a conexão assim que a referência para o objeto de recurso seja eliminada.

Encerrando a Conexão $db >closeconnection();

Declarações: para quê servem? RECUPERAR TUDO? NÃO,UM REGISTRO DECADA VEZ! GreenArrowcreated bymortweisinger andgeorgepappin 1941 DCComics AllRightsReserved

Preparando Declarações SQL com o construtor de Zend_Db_Statement require_once('zend/db/statement.php'); require_once('zend/config/xml.php'); $config=newzend_config_xml('config.xml','development'); $db=zend_db::factory($config >db >adapter,$config >db >config >toarray()); $sql='select*fromalunoswhereid>?'; $stmt=newzend_db_statement_pdo($db,$sql); $stmt >execute(array(2)); while($registro=$stmt >fetch()) { foreach($registroas$campo=>$conteudo) { echo"$campo=$conteudo<br>"; } }

Preparando Declarações SQL com o próprio objeto Zend_Db require_once('zend/db/statement.php'); require_once('zend/config/xml.php'); $config=newzend_config_xml('config.xml','development'); $db=zend_db::factory($config >db >adapter,$config >db >config >toarray()); $sql='select*fromalunoswhereid>?'; $stmt=$db >query($sql,array(2)); $stmt >execute(); while($registro=$stmt >fetch()) { foreach($registroas$campo=>$conteudo) { echo"$campo=$conteudo<br>"; } }

Recupere uma única coluna require_once('zend/db/statement.php'); require_once('zend/config/xml.php'); $config=newzend_config_xml('config.xml','development'); $db=zend_db::factory($config >db >adapter,$config >db >config >toarray()); $sql='select*fromalunoswhereid>?'; $stmt=$db >query($sql,array(2)); $stmt >execute(); while($coluna=$stmt >fetchcolumn(1)) { echo"$coluna<br>"; }

Consultas Orientadas a Objetos: Zend_Db_Select $db=zend_db::factory($config >db >adapter,$config >db >config >toarray()); $select=$db >select(); $select >from('alunos'); $select >where('id>?',2); $select >order('nome'); $stmt=$select >query(); $stmt >execute(); while($registro=$stmt >fetch()) { echo'<p>'; foreach($registroas$campo=>$conteudo) { echo"$campo=$conteudo<br>"; } echo'</p>'; }

NÃO!TEMA INTERFACE FLUENTE! E EU TENHO QUE ESCREVER DESSE JEITO? Kingpinrcreated bystanlee andjohn RomitaSr.in 1967 MarvelComics AllRights Reserved Spidermancreated bystanlee andsteveditkoin 1962 MarvelComics AllRightsReserved

Zend_Db_Select: Interface Fluente require_once('zend/db.php'); require_once('zend/config/xml.php'); $config=newzend_config_xml('config.xml','development'); $db=zend_db::factory($config >db >adapter,$config >db >config >toarray() ); $select=$db >select(); $select >from('alunos') >where('id>?',2) >order('nome'); $stmt=$select >query(); $stmt >execute(); while($registro=$stmt >fetch()) { echo'<p>'; foreach($registroas$campo=>$conteudo) { echo"$campo=$conteudo<br>"; } echo'</p>'; }

Zend_Db_Select: Obtendo a expressão SQL 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() ); $select=$db >select(); $select >from('alunos') >where('id>?',2) >order('nome'); echo$select > tostring();

Tabelas como Objetos: Zend_Db_Table ÉA IMPLEMENTAÇÃO DOGATEWAYDE TABELADEDADOS! GreenLanternAlanScott createdbybillfinger andmartinnodellin 1940 DCComics AllRightsReserved

Zend_Db_Table : Criando o Modelo <?php require_once('zend/db/table.php'); classalunosextendszend_db_table { protected$_name='alunos'; }?>

Zend_Db_Table : Usando o Modelo para Recuperar Registros require_once('zend/db.php'); require_once('zend/config/xml.php'); require_once('alunos.php'); $config=newzend_config_xml('config.xml','development'); $db=zend_db::factory($config >db >adapter,$config >db config >toarray()); Zend_Db_Table_Abstract::setDefaultAdapter($db); $alunos=newalunos(); $where=$alunos >getdefaultadapter() >quoteinto('id>?',2); $registros=$alunos >fetchall($where,'nome');

Zend_Db_Table : Usando o Modelo para Recuperar Registros foreach($registrosas$registro) { echo'<p>'; foreach($registro >toarray()as$campo=>$conteudo) { echo"$campo=$conteudo<br>"; } echo'</p>'; }

Zend_Db_Table : Incluindo registros require_once('zend/db.php'); require_once('zend/config/xml.php'); require_once('alunos.php'); $config=newzend_config_xml('config.xml','development'); $db=zend_db::factory( $config >db >adapter, $config >db >config >toarray() ); Zend_Db_Table_Abstract::setDefaultAdapter($db); $alunos=newalunos(); $data=array( "nome"=>'urtigão' ); $alunos >insert($data);

Zend_Db_Table : Atualizando registros require_once('zend/db.php'); require_once('zend/config/xml.php'); require_once('alunos.php'); $config=newzend_config_xml('config.xml','development'); $db=zend_db::factory( $config >db >adapter, $config >db >config >toarray() ); Zend_Db_Table_Abstract::setDefaultAdapter($db); $alunos=newalunos(); $data=array( "nome"=>'vovódonalda' ); $where=$alunos >getadapter() >quoteinto('id=?',14); $alunos >update($data,$where);

Zend_Db_Table : Apagando registros require_once('zend/db.php'); require_once('zend/config/xml.php'); require_once('alunos.php'); $config=newzend_config_xml('config.xml','development'); $db=zend_db::factory( $config >db >adapter, $config >db >config >toarray() ); Zend_Db_Table_Abstract::setDefaultAdapter($db); $alunos=newalunos(); $data=array( "nome"=>'vovódonalda' ); $where=$alunos >getadapter() >quoteinto('id=?',15); $alunos >delete($where);

Conjuntos de Linhas como Objetos: Zend_Db_Rowset ÉA IMPLEMENTAÇÃO DOGATEWAYDE LINHASDEDADOS!

Zend_Db_Rowset a partir de Zend_Db_Table As consultas feitas com os métodos fetchall() e find() retornam objetos Zend_Db_Rowset. O método find() faz buscas diretamente pela chave primária. Se um valor simples for passado como parâmetro, ele retorna um objeto Zend_Db_Rowset com somente um objeto Zend_Db_Row. Se for passado uma matriz de valores, serão retornados tantos objetos Zend_Db_Row quantos os cujas chaves primárias combinarem com as da matriz.

Linhas como Objetos: Zend_Db_Row $alunos=newalunos(); $where=$alunos >getdefaultadapter() >quoteinto('id>?',2); $registros=$alunos >fetchall($where,'nome'); while($registro=$registros >current()) { echo'<p>'; foreach($registro >toarray()as$campo=>$conteudo) { echo"$campo=$conteudo<br>"; } echo'</p>'; $registros >next(); } OPA, TEM UM PADRÃO ITERATOR AQUI!

Linhas como Objetos: Zend_Db_Row TÁ,MASPRA QUESERVE AFINALESSE ZEND_DB_ROW? TheThing createdbystanlee andjackkirbyin 1961 MarvelComics AllRightsReserved

Zend_Db_Row: Objetos Persistentes require_once('zend/db.php'); require_once('zend/config/xml.php'); require_once('alunos.php'); $config=newzend_config_xml('config.xml','development'); $db=zend_db::factory($config >db >adapter,$config >db >config >toarray()); Zend_Db_Table_Abstract::setDefaultAdapter($db); $alunos=newalunos(); $where=$alunos >getdefaultadapter() >quoteinto('nome=?','zico'); $registro=$alunos >fetchrow($where); $registro >nome='zeca'; $registro >save(); OPA, MAS ESSE É O PADRAO ACTIVE RECORD!

Zend_Db_Row: Criar Objetos = Incluir Registros require_once('zend/db.php'); require_once('zend/config/xml.php'); require_once('alunos.php'); $config=newzend_config_xml('config.xml','development'); $db=zend_db::factory( $config >db >adapter, $config >db >config >toarray() ); Zend_Db_Table_Abstract::setDefaultAdapter($db); $alunos=newalunos(); $registro=$alunos >createrow(); $registro >nome='chiquinho'; $registro >save();

Zend_Db_Row: O Objeto Apaga o Registro (Ele Mesmo!) require_once('zend/db.php'); require_once('zend/config/xml.php'); require_once('alunos.php'); $config=newzend_config_xml('config.xml','development'); $db=zend_db::factory( $config >db >adapter, $config >db >config >toarray() ); Zend_Db_Table_Abstract::setDefaultAdapter($db); $alunos=newalunos(); $registro=$alunos >fetchrow("nome='chiquinho'"); $registro >delete();

Zend_Db_Row: E se os dados mudarem? Quando o objeto Zend_Db_Row é recuperado através de uma consulta, ele retorna com os dados do banco naquele momento. Atualizações no banco não são propagadas automaticamente para o objeto. Para carregar o objeto com os dados atualizados, use o método refresh().

Monitore as Operações do Banco $profiler=$db >getprofiler(); Isso retorna uma instância de objeto Zend_Db_Profiler. Com essa instância, o desenvolvedor pode examinar suas consultas usando uma variedade de métodos: gettotalnumqueries() retorna o número total de consultas que foram executadas. gettotalelapsedsecs() retorna o número total de segundos transcorridos para todas as consultas executadas. getqueryprofiles() retorna um vetor de todos os perfis de consulta. getlastqueryprofile() retorna o último (mais recente) perfil de consulta, não obstante a consulta tenha ou não terminado. (se não tiver, a hora de término será nula)

Monitore as Operações do Banco clear() limpa quaisquer perfis de consulta passados da pilha. O valor de retorno de getlastqueryprofile() e os elementos individuais de getqueryprofiles() são objetos Zend_Db_Profiler_Query, que provêem a habilidade de inspecionar as consultas individuais por elas mesmas: getquery() retorna o texto SQL da consulta. O texto SQL de uma declaração preparada com parâmetros é o texto no momento em que a consulta for preparada, assim ela contém espaços reservados para valores de parâmetro, não os valores usados quando a declaração é executada. getqueryparams() retorna um vetor de valores de parâmetro usados quando executar uma consulta preparada. Isso inclui tanto parâmetros de combinação quanto argumentos para o método execute() de declaração. As chaves do vetor são índices de parâmetro posicionais (baseados em 1) ou nomeados (string). getelapsedsecs() retorna o número de segundo que a consulta levou para rodar.

Terei que fazer tudo isso? Pode usar o projeto mínimo pra começar, ele está disponível em www.fgsl.eti.br. Lembre-se de que é apenas um dos layouts possíveis para uma aplicação.

Onde encontro ajuda? http://framework.zend.com www.zfbrasil.com Tem um livro também, sabe...

Contato: flaviogomesdasilva@yahoo.com.br FOIUMA GRANDE HONRA!