Joao Neto’s Blog

Algumas idéias para um mundo melhor – Blog do João Neto!

Tratando Erros do PostGreSQL em PHP

Publicado por João em 20 ' outubro 2008

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:

<?php /** * Qualquer um possui permissao para alterar e utilizar

* 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!

Enviado em PHP, Postgres, Programação, Tutorial | Etiquetado: , , , , , | Deixar um comentário »

 
Seguir

Obtenha todo post novo entregue na sua caixa de entrada.