Changes between Version 4 and Version 5 of WF/RecomendacoesdeusodeBancodeDados
- Timestamp:
- 08/22/07 15:23:19 (17 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
WF/RecomendacoesdeusodeBancodeDados
v4 v5 1 = Recomendações de Uso de Banco de Dados = 2 [[TOC(heading=Workflow,depth=1,WF/Changelog,WF/Documentacao,WF/Instalacao,WF/Links,WF/Propostas,WF/Recursos)]] 3 1 4 == Classe == 5 2 6 A classe que é utilizada nos processos de Workflow para fazer conexão com o banco de dados é a wf_db. Esta classe faz uso do [http://adodb.sourceforge.net ADOdb] como camada de abstração de banco de dados. 3 7 4 A documentação da classe pode ser vista n este [http://doc.workflow.celepar.parana/api/Workflow/local/wf_db.html link]8 A documentação da classe pode ser vista na [htdocs:wf/api/index.html documentação do código fonte do Workflow] 5 9 6 10 Os métodos básicos da classe são: … … 12 16 * ''query'' - executa um comando SQL no banco de dados. 13 17 14 15 16 18 == Objeto == 17 19 18 O objeto da classe wf_db já vem criado por padrão no desenvolvimento utilizando o MVC proposto - [wiki:WF/ MetodologiadeDesenvolvimento Metodologia de Desenvolvimento].20 O objeto da classe wf_db já vem criado por padrão no desenvolvimento utilizando o MVC proposto - [wiki:WF/ArquiteturadeDesenvolvimento Arquitetura de Desenvolvimento]. 19 21 20 22 Ele pode ser acessado em qualquer classe model através do atributo {{$this->model}} 21 22 23 23 24 24 == Bind == … … 27 27 28 28 {{{ 29 30 29 /* SEM BIND */ 31 30 … … 34 33 $this->DAO->query("INSERT INTO usuario(usuario_id, nome) VALUES(2, 'Maria')"); //plano de execução 2 35 34 36 37 38 35 /* COM BIND */ 39 36 … … 41 38 42 39 $this->DAO->query('INSERT INTO usuario(usuario_id, nome) VALUES(?, ?)', array(2, 'Maria')); //plano de execução 3 43 44 40 }}} 45 41 … … 52 48 Como pode ser visto no exemplo, ao invés de se inserir os valores na query, utiliza-se {{?}} para cada valor e, depois os valores são passados em uma {{array}} como segundo parâmetro do método query. Os itens da array seguem a ordem das {{?}} utilizadas. 53 49 54 55 56 50 == Utilização == 57 51 … … 59 53 60 54 {{{ 61 62 55 $this->DAO->connect(); 63 64 56 }}} 65 57 … … 69 61 70 62 {{{ 71 72 63 /* Exemplo 01 */ 73 64 … … 85 76 86 77 87 88 78 /* Exemplo 02 */ 89 79 … … 95 85 96 86 $data[] = $row; 97 98 87 }}} 99 100 101 88 102 89 === INSERT === 103 90 104 91 {{{ 105 106 92 $result = $this->DAO->query("INSERT INTO area(area_id, nome) VALUES(?, ?)", array(1, 'DISER')); 107 93 … … 113 99 114 100 echo "Erro na execução da query"; 115 116 101 }}} 117 118 119 102 120 103 === UPDATE === 121 104 122 105 {{{ 123 124 106 /* troca o nome do usuário José para Joselito 125 107 126 108 $result = $this->DAO->query("UPDATE usuario SET nome = ? WHERE (nome = ?)", array('Joselito', 'José')); 127 128 109 }}} 129 130 131 110 132 111 === DELETE === 133 112 134 113 {{{ 135 136 114 /* apaga o usuário cujo ID é 3 */ 137 115 138 116 $result = $this->DAO->query("DELETE FROM usuario WHERE (usuario_id = ?)", array(3)); 139 140 117 }}} 141 118 119 == Casos Especiais == 142 120 143 144 === Casos Especiais === 145 146 ==== Inserção de Arquivos no Banco de Dados ==== 121 === Inserção de Arquivos no Banco de Dados === 147 122 148 123 O procedimento para inserir o conteúdo de um arquivo no Banco de Dados, requer uma pequena modificação que faz o tratamento do conteúdo antes de inseri-lo. Este tratamento é feito através da chamada ao método {{escapeBytea}}: 149 124 150 125 {{{ 151 152 126 /* supondo que $bin possua o conteúdo do arquivo */ 153 127 154 128 $bin = $this->DAO->escapeBytea($bin); 155 129 156 $result = $this->DAO->query("INSERT INTO tabela_arquivo(nome, conteudo) VALUES(?, ?)", array('arquivo.dat', $bin));157 130 $result = $this->DAO->query("INSERT INTO tabela_arquivo(nome, conteudo) VALUES(?, ?)", 131 array('arquivo.dat', $bin)); 158 132 }}} 159 133 160 161 162 ==== Transações ==== 134 === Transações === 163 135 164 136 Em alguns casos, é vital a utilização de transações. Sua utilização é muito simples, como pode ser visto abaixo: 165 137 166 138 {{{ 167 168 139 /* neste exemplo criamos uma área e tentamos colocar o funcionário José nesta nova área. 169 140 … … 187 158 188 159 $this->DAO->failTrans(); // faz o rollback das alterações 189 190 160 }}}