Commit 75b15c35f879ac842a9cd6876f054dac0ed79f1a

Authored by Lucas D'Avila
1 parent b4b5131c
Exists in master

Adicionado suporte a queries preparadas (usado evitar sql injection), adicionado…

… try para pegar erros redirecionamento para /modules/Error
Showing 1 changed file with 54 additions and 72 deletions   Show diff stats
ieducar/intranet/include/clsBancoPgSql.inc.php
@@ -32,6 +32,8 @@ require_once 'clsConfigItajai.inc.php'; @@ -32,6 +32,8 @@ require_once 'clsConfigItajai.inc.php';
32 require_once 'include/clsCronometro.inc.php'; 32 require_once 'include/clsCronometro.inc.php';
33 require_once 'include/clsEmail.inc.php'; 33 require_once 'include/clsEmail.inc.php';
34 34
  35 +require_once 'modules/Error/Mailers/NotificationMailer.php';
  36 +
35 /** 37 /**
36 * clsBancoSQL_ abstract class. 38 * clsBancoSQL_ abstract class.
37 * 39 *
@@ -148,11 +150,6 @@ abstract class clsBancoSQL_ @@ -148,11 +150,6 @@ abstract class clsBancoSQL_
148 /** 150 /**
149 * @var bool 151 * @var bool
150 */ 152 */
151 - var $showReportarErro = TRUE;  
152 -  
153 - /**  
154 - * @var bool  
155 - */  
156 var $executandoEcho = FALSE; 153 var $executandoEcho = FALSE;
157 154
158 /** 155 /**
@@ -362,16 +359,10 @@ abstract class clsBancoSQL_ @@ -362,16 +359,10 @@ abstract class clsBancoSQL_
362 // Verifica se o link de conexão está inativo e conecta 359 // Verifica se o link de conexão está inativo e conecta
363 if (0 == $this->bLink_ID) { 360 if (0 == $this->bLink_ID) {
364 $this->FraseConexao(); 361 $this->FraseConexao();
365 -  
366 - if ($this->bDepurar) {  
367 - printf("<br>Depurar: Frase de Conex&atilde;o : %s<br>\n", $this->strFraseConexao);  
368 - }  
369 -  
370 $this->bLink_ID = pg_connect($this->strFraseConexao); 362 $this->bLink_ID = pg_connect($this->strFraseConexao);
371 363
372 - if (!$this->bLink_ID) {  
373 - $this->Interrompe("Link inv&aacute;lido, conex&atilde;o falhou!");  
374 - } 364 + if (! $this->bLink_ID)
  365 + $this->Interrompe("N&atilde;o foi possivel conectar ao banco de dados");
375 } 366 }
376 } 367 }
377 368
@@ -447,23 +438,17 @@ abstract class clsBancoSQL_ @@ -447,23 +438,17 @@ abstract class clsBancoSQL_
447 438
448 if (!$this->bConsulta_ID) { 439 if (!$this->bConsulta_ID) {
449 if ($this->getThrowException()) { 440 if ($this->getThrowException()) {
450 - $message = $this->bErro_no ? "($this->bErro_no) " . $this->strErro :  
451 - pg_last_error($this->bLink_ID); 441 + $message = $this->bErro_no ? "($this->bErro_no) " . $this->strErro :
  442 + pg_last_error($this->bLink_ID);
452 443
453 $message .= PHP_EOL . $this->strStringSQL; 444 $message .= PHP_EOL . $this->strStringSQL;
454 445
455 throw new Exception($message); 446 throw new Exception($message);
456 } 447 }
457 - else { 448 + else
  449 + {
458 $erroMsg = "SQL invalido: {$this->strStringSQL}<br>\n"; 450 $erroMsg = "SQL invalido: {$this->strStringSQL}<br>\n";
459 - die($erroMsg);  
460 -  
461 - if ($this->transactionBlock) {  
462 - // Nada.  
463 - }  
464 -  
465 - $this->Interrompe($erroMsg);  
466 - return FALSE; 451 + throw new Exception("Erro ao executar uma ação no banco de dados: $erroMsg");
467 } 452 }
468 } 453 }
469 454
@@ -810,58 +795,55 @@ abstract class clsBancoSQL_ @@ -810,58 +795,55 @@ abstract class clsBancoSQL_
810 * @param string $msg 795 * @param string $msg
811 * @param bool $getError 796 * @param bool $getError
812 */ 797 */
813 - function Interrompe($msg, $getError = FALSE) 798 + function Interrompe($appErrorMsg, $getError = FALSE)
814 { 799 {
815 - if ($getError) {  
816 - $this->strErro = pg_result_error($this->bConsulta_ID);  
817 - $this->bErro_no = ($this->strErro == '') ? FALSE : TRUE;  
818 - } 800 + $lastError = error_get_last();
819 801
820 - $erro1 = substr(md5('1erro'), 0, 10);  
821 - $erro2 = substr(md5('2erro'), 0, 10); 802 + @session_start();
  803 + $_SESSION['last_php_error_message'] = $lastError['message'];
  804 + $_SESSION['last_php_error_line'] = $lastError['line'];
  805 + $_SESSION['last_php_error_file'] = $lastError['file'];
  806 + @session_write_close();
822 807
823 - function show($data, $func = 'var_dump') {  
824 - ob_start();  
825 - $func($data);  
826 - $output = ob_get_contents();  
827 - ob_end_clean();  
828 - return $output;  
829 - } 808 + $pgErrorMsg = $getError ? pg_result_error($this->bConsulta_ID) : '';
  809 + NotificationMailer::unexpectedDataBaseError($appErrorMsg, $pgErrorMsg, $this->strStringSQL);
  810 +
  811 + die("<script>document.location.href = '/module/Error/unexpected';</script>");
  812 + }
  813 +
  814 +
  815 + /**
  816 + * Executa uma consulta SQL preparada ver: http://php.net/manual/en/function.pg-prepare.php
  817 + * ex: $db->execPreparedQuery("select * from portal.funcionario where matricula = $1 and senha = $2", array('admin', '123'))
  818 + *
  819 + * @param string $name nome da consulta
  820 + * @param string $query sql para ser preparado
  821 + * @param array $params parametros para consulta
  822 + *
  823 + * @return bool|resource FALSE em caso de erro ou o identificador da consulta
  824 + * em caso de sucesso.
  825 + */
  826 + public function execPreparedQuery($query, $params = array()) {
  827 + try {
  828 + $errorMsgs = '';
  829 + $this->Conecta();
  830 + $dbConn = $this->bLink_ID;
  831 +
  832 + if (! is_array($params))
  833 + $params = array($params);
  834 +
  835 + $this->bConsulta_ID = @pg_query_params($dbConn, $query, $params);
  836 + $resultError = @pg_result_error($this->bConsulta_ID);
  837 + $errorMsgs .= trim($resultError) != '' ? $resultError : @pg_last_error($this->bConsulta_ID);
830 838
831 - @session_start();  
832 - $_SESSION['vars_session'] = show($_SESSION);  
833 - $_SESSION['vars_post'] = show($_POST);  
834 - $_SESSION['vars_get'] = show($_GET);  
835 - $_SESSION['vars_cookie'] = show($_COOKIE);  
836 - $_SESSION['vars_erro1'] = $msg;  
837 - $_SESSION['vars_erro2'] = $this->strErro;  
838 - $_SESSION['vars_server'] = show($_SERVER);  
839 - $id_pessoa = $_SESSION['id_pessoa'];  
840 -  
841 - session_write_close();  
842 -  
843 - if ($this->showReportarErro) {  
844 - $array_idpes_erro_total = array();  
845 - $array_idpes_erro_total[4910] = TRUE;  
846 - $array_idpes_erro_total[2151] = TRUE;  
847 - $array_idpes_erro_total[8194] = TRUE;  
848 - $array_idpes_erro_total[7470] = TRUE;  
849 - $array_idpes_erro_total[4637] = TRUE;  
850 - $array_idpes_erro_total[4702] = TRUE;  
851 - $array_idpes_erro_total[1801] = TRUE;  
852 -  
853 - if (! $array_idpes_erro_total[$id_pessoa]) {  
854 - die( "<script>document.location.href = 'erro_banco.php';</script>" );  
855 } 839 }
856 - else {  
857 - printf("</td></tr></table><b>Erro de Banco de Dados:</b> %s<br><br>\n", $msg);  
858 - printf("<b>SQL:</b> %s<br><br>\n", $this->strStringSQL );  
859 - printf("<b>Erro do PgSQL </b>: %s (%s)<br><br>\n", $this->bErro_no, $this->strErro);  
860 - die("Sessão Interrompida."); 840 + catch(Exception $e) {
  841 + $errorMsgs .= "Exception: " . $e->getMessage();
861 } 842 }
862 - }  
863 - else {  
864 - die($this->strErro . "\n");  
865 - } 843 +
  844 + if ($this->bConsulta_ID == false || trim($errorMsgs) != '')
  845 + throw new Exception("Erro ao preparar consulta ($query) no banco de dados: $errorMsgs");
  846 +
  847 + return $this->bConsulta_ID;
866 } 848 }
867 -}  
868 \ No newline at end of file 849 \ No newline at end of file
  850 +}