Desenvolvimento PHP - Boas Práticas - Interações com o banco de dados
De DTI Wiki
Interações com o banco de dados, são as chamadas de procedimentos, funções e consulta oracle pelo PHP. A boa prática adotada é que toda interação deve possuir um programa oracle e o mesmo deve ser chamado no PHP, não utilizando código SQL nas aplicações.
Vejamos abaixo alguns exemplos:
Utilização de SQL:
<? // exemplo atual com sql function retornaFatorVencimento($app,$datavencimento){ global $retornaFatorVencimentoDTVenc; $retornaFatorVencimentoDTVenc = $datavencimento; $sql_fatorvencimento = "select to_date('$retornaFatorVencimentoDTVenc','dd/mm/rrrr') -to_date('07/10/1997','dd/mm/rrrr') as fatorvencimento from dual"; if(!$app->executeDefaultSql($sql_fatorvencimento, null, false)){ setMessage($app, '<br>não executou_3, erro='.$application->getErrorMessage(), 'erro'); } if(!$data_fatorvencimento = $app->fetchRow()){ setMessage($app, "no rows (sql_fatorvencimento)<br>", 'erro'); }else{ $fatorvencimento = $data_fatorvencimento["FATORVENCIMENTO"]; if($fatorvencimento < 0){ $fatorvencimento = 0; } } return $fatorvencimento; }
Chamadas de procedimentos utilizando variáveis globais:
<? // exemplo com chamada antiga e variáveis globais function getAlunosProuni($app, $codbanca, $codaluno = NULL){ global $getAlunosProunicodbanca, $getAlunosProunicodaluno; $getAlunosProunicodbanca = $codbanca; $getAlunosProunicodaluno = $codaluno; $query = "begin acdesenv.pkg_notaswebexames.prc_retprouni(:in_codbanca, :in_codaluno, :cur); end;"; $params = array( array("parameter"=>":in_codbanca", "variable"=>"getAlunosProunicodbanca", "value"=>$getAlunosProunicodbanca, "length"=>6), array("parameter"=>":in_codaluno", "variable"=>"getAlunosProunicodaluno", "value"=>$getAlunosProunicodaluno, "length"=>6) ); if(!$app->executeCursor($query, $params)){ erro($app, 'Ocorreu um erro ao buscar alunos bolsa Prouni.', $app->geterrormessage(), "ATENÇÃO", "#"); exit; } $alunos = array(); $alunos = $app->getAllrows(); return $alunos; }
Transformando SQL em um programa oracle e chamando no PHP.
<? // exemplo correto com a utilização da db. // nesse exemplo deve ser criado uma function oracle que será chamado pela db function retornaFatorVencimento($app, $datavencimento){ $res = db($app, 'F', 'addesenv.fun_fatorvencimento', $datavencimento); if($res['ERROR']){ erro($app, 'Ocorreu um erro ao buscar o fator de vencimento.', $res['ERRORMESSAGE'], "ATENÇÃO", "#"); exit; } $fatorvencimento = $res['RESULT']; if($fatorvencimento < 0){ $fatorvencimento = 0; } return $fatorvencimento; }
Chamada de procedimento sem a utilização de variáveis globais
<? // exemplo correto, com a utilização da db function getAlunosProuni($app, $codbanca, $codaluno = NULL){ $res = db($app, 'C', "acdesenv.pkg_notaswebexames.prc_retprouni", $codbanca, $codaluno); if($res['ERROR']){ erro($app, 'Ocorreu um erro ao buscar alunos bolsa Prouni.', $res['ERRORMESSAGE'], "ATENÇÃO", "#"); exit; } return $res['RESULT']; } ?>