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 | +} | ... | ... |