Commit 75b15c35f879ac842a9cd6876f054dac0ed79f1a
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 | 32 | require_once 'include/clsCronometro.inc.php'; |
33 | 33 | require_once 'include/clsEmail.inc.php'; |
34 | 34 | |
35 | +require_once 'modules/Error/Mailers/NotificationMailer.php'; | |
36 | + | |
35 | 37 | /** |
36 | 38 | * clsBancoSQL_ abstract class. |
37 | 39 | * |
... | ... | @@ -148,11 +150,6 @@ abstract class clsBancoSQL_ |
148 | 150 | /** |
149 | 151 | * @var bool |
150 | 152 | */ |
151 | - var $showReportarErro = TRUE; | |
152 | - | |
153 | - /** | |
154 | - * @var bool | |
155 | - */ | |
156 | 153 | var $executandoEcho = FALSE; |
157 | 154 | |
158 | 155 | /** |
... | ... | @@ -362,16 +359,10 @@ abstract class clsBancoSQL_ |
362 | 359 | // Verifica se o link de conexão está inativo e conecta |
363 | 360 | if (0 == $this->bLink_ID) { |
364 | 361 | $this->FraseConexao(); |
365 | - | |
366 | - if ($this->bDepurar) { | |
367 | - printf("<br>Depurar: Frase de Conexão : %s<br>\n", $this->strFraseConexao); | |
368 | - } | |
369 | - | |
370 | 362 | $this->bLink_ID = pg_connect($this->strFraseConexao); |
371 | 363 | |
372 | - if (!$this->bLink_ID) { | |
373 | - $this->Interrompe("Link inválido, conexão falhou!"); | |
374 | - } | |
364 | + if (! $this->bLink_ID) | |
365 | + $this->Interrompe("Não foi possivel conectar ao banco de dados"); | |
375 | 366 | } |
376 | 367 | } |
377 | 368 | |
... | ... | @@ -447,23 +438,17 @@ abstract class clsBancoSQL_ |
447 | 438 | |
448 | 439 | if (!$this->bConsulta_ID) { |
449 | 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 | 444 | $message .= PHP_EOL . $this->strStringSQL; |
454 | 445 | |
455 | 446 | throw new Exception($message); |
456 | 447 | } |
457 | - else { | |
448 | + else | |
449 | + { | |
458 | 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 | 795 | * @param string $msg |
811 | 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 | 849 | \ No newline at end of file |
850 | +} | ... | ... |