Existem certas maneiras de tratar os erros do PGSQL – PHP Evitando que o usuário receba mensagens que não lhe interessam.
Apresento um código que funciona:
* esse codigo ou qualquer trecho dele livremente
* ——————————————————
*/
?>
<?php
/**
* Classe para gerenciar as consultas SQL do Projeto
* Versao 1.0 – Autor: Joao Neto <joao_neto@ymail.com>
* Data: 20/out/2008
*
*/
class Conection {
private static $conection = null;
function __construct ( ) {
if ( $this->conection == null )
$this->conection = $this->conectaBanco();
}
function begin ( ) {
$this->executaQuery ( “BEGIN” , null );
}
function commit ( ) {
$this->executaQuery ( “COMMIT” , null );
}
function rollback ( ) {
$this->executaQuery ( “ROLLBACK” , null );
}
function executaQuery ( $sql, $mensagem ) {
pg_send_query ( $this->conection, $sql );
$result = pg_get_result ($this->conection);
//erro
if ( $result == 7 ) {
new Mensagem ( $mensagem );
return false; //costumo usar exit; mas, como exemplo retorne false!
}else
return $result; //retorna um resource
}
private function conectaBanco ( ) {
$host = “host=localhost user=usuario password=senha database=banco port=5432″;
$con = pg_connect ( $host ) or die ( “Falha ao conectar!” );
return $con;
}
}
/**
* Classe para gerenciar as Mensagens do Seu projeto
* Para fins de exemplo coloquei-a no mesmo arquivo .php
* Coloque essa classe em um PATH onde toda sua aplicacao tenha acesso.
* Essa classe eh util por voce nao precisar editar o estilo de suas mensagens
* em varios lugares diferentes! Use o poder da POO!!
* Versao 1.0 – Autor: Joao Neto <joao_neto@ymail.com>
* Data: 20/out/2008
*
*/
class Mensagem {
function __construct ( $mensagem ) {
//insira CSS, parametros com Links!
echo “<fieldset> \n
\t<legend>Mensagem</legend> \n
\t$mensagem\n
</fieldset>\n“;
}
}
?>
Você pode usar as funcões pg_send_query e pg_get_result. A primeira evita que o resultado da consulta SQL seja exibida diretamente para o usuário, evitando que mensagens do tipo “INVALID FOREIGN KEY(…), OU A TABELA yyy NAO EXISTE”.
Voce pode enviar várias consultas com a função pg_send_query, e capturar resultado delas recursivamente com pg_get_result.
DICA: Retornos do pg_get_result:
| Variável | Valor | Descrição |
| PGSQL_COMMAND_OK | 1 | Valor retornado caso a query tenha retornado resultados |
| PGSQL_EMPTY_QUERY | 0 | Valor retornado caso a query esteja vazia |
| PGSQL_BAD_RESPONSE | 5 | Valor retornado caso a query tenha retornado um valor desconhecido |
| PGSQL_NONFATAL_ERROR | 6 | Valor retornado caso a query tenha retornado um Warning |
| PGSQL_FATAL_ERROR | 7 | Valor retornado caso a query tenha retornado um Erro |
Do contrário, pg_get_result retorna um resource que já estamos habituados a utilizar!
Fica então o código como exemplo!
Tabela de Retornos de pg_get_result:
Espero ter ajudado! Um abraço!