3501469 Zend Framework Chapter 10 Db Translated

Embed Size (px)

Citation preview

Captulo 10. Zend_DbTraduzido por Flvio Gomes da Silva Lisboa (verso 1.5 do Zend Framework)

Sumrio10.1. Zend_Db_Adapter.................................................................................................................. 4 10.1.1. Conectando a um Banco de Dados usando um Adaptador............................................. 5 10.1.1.1. Usando um Construtor do Adaptador Zend_Db......................................................5 10.1.1.2. Usando Zend_Db Factory....................................................................................... 5 10.1.1.3. Usando Zend_Config com Zend_Db Factory......................................................... 6 10.1.1.4. Parmetros do Adaptador........................................................................................ 7 10.1.1.5. Gerenciando Conexes Ociosas.............................................................................. 9 10.1.2. O banco de dados de exemplo.........................................................................................9 10.1.3. Lendo Resultados de Consulta...................................................................................... 11 10.1.3.1. Buscando um Objeto Rowset Completo............................................................... 11 10.1.3.2. Alterando o Fetch Mode........................................................................................11 10.1.3.3. Buscando um Objeto Rowset como um Vetor Associativo.................................. 12 10.1.3.4. Buscando uma Coluna Simples de um Objeto Rowset......................................... 13 10.1.3.5. Buscando Pares Chave-Valor de um Objeto Rowset............................................ 13 10.1.3.6. Buscando uma Linha Simples de um Objeto Rowset........................................... 14 10.1.3.7. Buscando um Escalar Simples de um Objeto Rowset...........................................14 10.1.4. Gravando Alteraes no Banco de Dados.....................................................................14 10.1.4.1. Incluindo Dados.................................................................................................... 15 10.1.4.2. Recuperando um Valor Gerado............................................................................. 16 10.1.4.3. Atualizando Dados................................................................................................ 17 10.1.4.4. Apagando Dados................................................................................................... 18 10.1.5. Citando Valores e Identificadores.................................................................................19 10.1.5.1. Usando quote() ..................................................................................................... 19 10.1.5.2. Usando quoteInto() ...............................................................................................20 10.1.5.3. Usando quoteIdentifier() ...................................................................................... 21 10.1.6. Controlando Transaes de Banco de Dados................................................................22 10.1.7. Listando e Descrevendo Tabelas...................................................................................23 10.1.8. Fechando um Conexo..................................................................................................24 10.1.9. Rodando Outras Declaraes de Banco de Dados........................................................ 25 10.1.10. Notas sobre Adaptadores Especficos......................................................................... 25 10.1.10.1. IBM DB2............................................................................................................. 26 10.1.10.2. MySQLi...............................................................................................................26 10.1.10.3. Oracle.................................................................................................................. 26 10.1.10.4. PDO para IBM DB2 e Informix Dynamic Server (IDS).....................................26 10.1.10.5. PDO Microsoft SQL Server................................................................................ 27 10.1.10.6. PDO MySQL....................................................................................................... 27 10.1.10.7. PDO Oracle......................................................................................................... 27 10.1.10.8. PDO PostgreSQL................................................................................................ 27 10.1.10.9. PDO SQLite........................................................................................................ 28 10.1.10.10. Firebird/Interbase.............................................................................................. 28 10.2. Zend_Db_Statement............................................................................................................. 28 10.2.1. Criando uma Declarao............................................................................................... 29 1/102

10.2.2. Executando uma Declarao......................................................................................... 29 10.2.3. Buscando Resultados de uma Declarao SELECT..................................................... 30 10.2.3.1. Buscando uma Linha Simples de um Objeto Rowset........................................... 30 10.2.3.2. Buscando um Objeto Rowset Completo............................................................... 31 10.2.3.3. Alterando o Fetch Mode........................................................................................32 10.2.3.4. Buscando uma Coluna Simples de um Objeto Rowset......................................... 32 10.2.3.5. Buscando uma Linha como um Objeto................................................................. 33 10.3. Zend_Db_Profiler................................................................................................................. 33 10.3.1. Introduo..................................................................................................................... 33 10.3.2. Usando o Profiler.......................................................................................................... 35 10.3.3. Uso Avanado do Profiler.............................................................................................36 10.3.3.1. Filtro pelo tempo de consulta transcorrido............................................................36 10.3.3.2. Filtro pelo tipo de consulta.................................................................................... 37 10.3.3.3. Recuperar perfis por tipo de consulta....................................................................37 10.4. Zend_Db_Select....................................................................................................................38 10.4.1. Resumo do Objeto Select.............................................................................................. 38 10.4.2. Criando um Objeto Select............................................................................................. 38 10.4.3. Construindo consultas Select........................................................................................ 39 10.4.3.1. Adicionando uma clusula FROM........................................................................ 40 10.4.3.2. Adicionando Colunas............................................................................................ 41 10.4.3.3. Adicionando Colunas de Expresso...................................................................... 42 10.4.3.4. Adicionando Outra Tabela Consulta com JOIN.................................................43 10.4.3.5. Adicionando uma Clusula WHERE.................................................................... 46 10.4.3.6. Adicionando uma clusula GROUP BY............................................................... 49 10.4.3.7. Adicionando uma Clusula HAVING...................................................................49 10.4.3.8. Adicionando uma Clusula ORDER BY.............................................................. 50 10.4.3.9. Adicionando uma Clsula LIMIT......................................................................... 51 10.4.3.10. Adicionando o Modificador de Consulta DISTINCT......................................... 52 10.4.3.11. Adicionando o Modificador de Consulta FOR UPDATE...................................52 10.4.4. Executando Consultas Select........................................................................................ 52 10.4.4.1. Executando Consultas Select do Db Adapter........................................................53 10.4.4.2. Executando Consultas Select a partir de um Objeto............................................. 53 10.4.4.3. Convertendo um Objeto Select para um Literal SQL........................................... 53 10.4.5. Outros mtodos............................................................................................................. 54 10.4.5.1. Recuperando Partes do Objeto Select................................................................... 54 10.4.5.2. Recompondo Partes do Objeto Select................................................................... 55 10.5. Zend_Db_Table.................................................................................................................... 56 10.5.1. Introduo Classe Table............................................................................................. 56 10.5.2. Definindo uma Classe Table......................................................................................... 56 10.5.2.1. Definindo o Nome e o Esquema da Tabela........................................................... 56 10.5.2.2. Definindo a Chave Primria da Tabela................................................................. 58 10.5.2.3. Sobrescrevendo Mtodos de Configurao de Table............................................ 58 10.5.2.4. Table initialization.................................................................................................59 10.5.3. Criando uma Instncia de Table....................................................................................60 10.5.3.1. Especificando um Adaptador de Banco de Dados................................................ 60 10.5.3.2. Configurando um Adaptador de Banco de Dados Padro.....................................60 10.5.3.3. Armazenando um Adaptador de Banco de Dados no Registro............................. 61 10.5.4. Incluindo Linhas em uma Tabela..................................................................................61 10.5.4.1. Usar um Table com uma Chave de Auto-incremental.......................................... 62 10.5.4.2. Usando um Table com um Sequence................................................................... 63 2/102

10.5.4.3. Uando um Table com uma Chave Natural............................................................ 63 10.5.5. Atualizando Linhas em um Table................................................................................. 64 10.5.6. Excluindo Linhas de um Table..................................................................................... 64 10.5.7. Procurando Linhas pela Chave Primria.......................................................................65 10.5.8. Consultando um Conjunto de Linhas............................................................................66 10.5.8.1. API Select.............................................................................................................66 10.5.8.2. Buscando um conjunto de linhas...........................................................................68 10.5.8.3. Uso avanado........................................................................................................ 68 10.5.9. Consultando uma Linha Simples.................................................................................. 70 10.5.10. Recuperando Informaes de Metadados de Tabelas................................................. 70 10.5.11. Cacheando Metadados de Tabela................................................................................71 10.5.12. Customizando e Estendendo uma Classe Table..........................................................73 10.5.12.1. Usando Classes Row ou Rowset Customizadas..................................................73 10.5.12.2. Definindo Lgica Customizada para Insert, Update e Delete............................. 74 10.5.12.3. Defina Mtodos de Busca Customizados em Zend_Db_Table...........................75 10.5.12.4. Defina Inflection em Zend_Db_Table................................................................ 75 10.6. Zend_Db_Table_Row...........................................................................................................76 10.6.1. Introduo..................................................................................................................... 76 10.6.2. Buscando uma Linha.....................................................................................................77 10.6.2.1. Lendo valores de coluna de uma linha.................................................................. 77 10.6.2.2. Recuperando Dados de Linha como um Vetor..................................................... 78 10.6.2.3. Buscando dados de tabelas relacionadas............................................................... 78 10.6.3. Escrevendo linhas em um banco de dados....................................................................78 10.6.3.1. Alterando valores de coluna em uma linha........................................................... 78 10.6.3.2. Incluindo uma nova linha...................................................................................... 79 10.6.3.3. Alterando valores em mltiplas colunas............................................................... 80 10.6.3.4. Apagando uma linha..............................................................................................80 10.6.4. Serializando e desserializando linhas............................................................................81 10.6.4.1. Serializando uma Linha.........................................................................................81 10.6.4.2. Desserializando Dados de Linha........................................................................... 81 10.6.4.3. Reativando uma Linha como Dado Ativo............................................................. 82 10.6.5. Estendendo a classe Row.............................................................................................. 82 10.6.5.1. Inicialiao de Row............................................................................................... 83 10.6.5.2. Definindo Lgica Customizada para Insert, Update, e Delete em Zend_Db_Table_Row.......................................................................................................... 83 10.6.5.3. Defina Inflection em Zend_Db_Table_Row......................................................... 85 10.7. Zend_Db_Table_Rowset...................................................................................................... 86 10.7.1. Introduo..................................................................................................................... 86 10.7.2. Buscando um Rowset....................................................................................................86 10.7.3. Recuperando Linhas de um Conjunto de Linhas.......................................................... 86 10.7.4. Recuperando um objeto Rowset como um Vetor......................................................... 88 10.7.5. Serializando e Desserializando um objeto Rowset....................................................... 89 10.7.6. Estendendo a classe Rowset..........................................................................................90 10.8. Relacionamentos Zend_Db_Table........................................................................................91 10.8.1. Introduo..................................................................................................................... 91 10.8.2. Definindo Relacionamentos.......................................................................................... 92 10.8.3. Buscando um objeto Rowset Dependente.....................................................................94 10.8.4. Buscando uma Linha Me.............................................................................................96 10.8.5. Buscando um objeto Rowset atravs de um Relacionamento Muitos-para-muitos......98 10.8.6. Operaes de Escrita em Cascata................................................................................100 3/102

10.8.6.1. Notas de Considerao sobre Operaes em Cascata......................................... 102

10.1. Zend_Db_AdapterZend_Db e suas classes relacionadas provem uma interface de banco de dados SQL simples para Zend Framework. Zend_Db_Adapter a classe bsica que voc usa para conectar sua aplicao PHP a um RDBMS1. H diferentes classes adaptadoras para cada marca de RDBMS. Os adaptadores Zend_Db criam uma ponte das extenses PHP especficas de um vendedor para uma interface comum, de modo a ajudar voc a escrever aplicaes PHP uma vez e distribu-las com mltiplas marcas de RDBMS com pouco esforo. A interface da classe adaptadora similar a interface da extenso PHP Data Objects. Zend_Db prov classes adaptadoras de drivers PDO para as seguintes marcas de RDBMS:

IBM DB2 e Informix Dynamic Server (IDS), usando a extenso PHP pdo_ibm MySQL, usando a extenso PHP pdo_mysql Microsoft SQL Server, usando a extenso PHP pdo_mssql Oracle, usando a extenso PHP pdo_oci PostgreSQL, usando a extenso PHP pdo_pgsql SQLite, usando a extenso PHP pdo_sqlite

Em adio, Zend_Db prov classes adaptadoras que utilizam extenses de bancos de dados PHP para as seguintes marcas de RDBMS:

MySQL, usando a extenso PHP mysqli Oracle, usando a extenso PHP oci8 IBM DB2, usando a extenso PHP ibm_db2 Firebird/Interbase, usando a extensp PHP php_interbase Nota Cada adaptador Zend_Db usa uma extenso PHP. Voc deve ter a extenso PHP respectiva habilitada em seu ambiente PHP para usar um adaptador Zend_Db. Por exemplo, se voc usar qualquer um dos adaptadores Zend_Db PDO, voc precisa habilitar tanto a extenso PDO quanto o driver PDO para a marca de RDBMS que voc usa.

1 Relational Database Management System: Sistema Gerenciador de Banco de Dados Relacional

4/102

10.1.1. Conectando a um Banco de Dados usando um AdaptadorEsta seo descreve como criar uma instncia de um adaptador de banco de dados. Isso corresponde a fazer uma conexo ao seu servidor RDBMS de sua aplicao PHP. 10.1.1.1. Usando um Construtor do Adaptador Zend_Db Voc pode criar uma instncia de um adaptador usando seu construtor. Um construtor de adaptador leva um argumento, que um vetor de parmetros usados para declarar a conexo Exemplo 10.1. Usando um Construtor do Adaptador