Foros del Web » Programando para Internet » PHP »

PHP y Postgresql manejador de errores

Estas en el tema de PHP y Postgresql manejador de errores en el foro de PHP en Foros del Web. Buenas amigos, actualmente estoy desarrollando una aplicación con php y postgressql, entonces actualmente estoy con el rollo de crear funciones (procedimientos) para realizar ciertas tareas ...
  #1 (permalink)  
Antiguo 22/03/2017, 05:48
Avatar de JuJoGuAl  
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 14 años, 8 meses
Puntos: 19
Pregunta PHP y Postgresql manejador de errores

Buenas amigos, actualmente estoy desarrollando una aplicación con php y postgressql, entonces actualmente estoy con el rollo de crear funciones (procedimientos) para realizar ciertas tareas en la BD, en el procedimiento, realice un par de excepciones para notificar cuando un error concreto (y entendible al ser humano comun) esta sucediendo, pero obvio hay otros errores que pueden ser violar una llave foranea, insertar un registro duplicado etc . . .

En php utilizando MVC estoy haciendo algo así:
Clasee de la BD (que ejecuta un procedimiento, recibiendo como referencia, el nombre del procedimiento y un array con los datos):
Código PHP:
public function procedure($procedure=false,$rows=false){
        
$response=array();
        if(
$procedure==false){
            
$response="Query is Empty!";
        }else{
            
$sql "SELECT ".$procedure."(";
            for (
$i=1$i<=count($rows); $i++){
                
$sql .= "$".$i.",";
            }
            
$sql substr($sql,0,-1);
            
$sql .= ")";
            
//echo $sql;
            
$res pg_prepare($this->linkid"my_query"$sql);
            
$res = @pg_execute($this->linkid"my_query"$rows);
            if(
$res){
                while(
$consF=pg_fetch_assoc($res))
                    
array_push($response,$consF[$procedure]);
            }else{
                
array_push($response,"ERROR");
                
array_push($response,$this->validateOperation());
            }
            return 
$response;
        }
    }
private function 
validateOperation (){
        return 
pg_last_error($this->linkid)=='' true :pg_last_error($this->linkid);
    } 
Luego creo una clase, que maneja determinadas tablas (según el módulo), en ella llamo una clase que obviamente llama el metodo creado anteriormente.
Código PHP:
 public function new_mov($array){
            return 
$mov $this->db->procedure("insert_art_mov",$array);
        } 
Luego en el controlador llamo la función creada y le paso como parametro el arreglo de los datos, entonces si recibo un error en el arreglo [0] muestro el error que me trajo dicho procedimiento (sea una excepcion que yo cree o las que se provocan cuando se viola una llave en la tabla)
Código PHP:
$mov_dat $mov->new_mov($values)
if(
$mov_dat[0]=="ERROR"){
    echo 
$mov_dat[1];
    }else{
    echo 
"Row Inserted";
    } 
Mi pregunta es, se que utilizando try catch puedo llevar mejor el tema de los errores el rollo es que no controlo los errores a traves del catch, quisiera una ayuda para comprender como puedo manejar correctamente los errores en postgres - php.

otra dudita que tengo, es posible crear una funcion (sea en php o postgresql) donde por ejemplo, cuando en la tabla a se intenta violar el pk me de el error #1 (y en otra tabla yo tendria algo como error #1: se intento insertar un dato que duplica la llave de la tabla a...
  #2 (permalink)  
Antiguo 22/03/2017, 17:24
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: PHP y Postgresql manejador de errores

El manejo de errores con excepciones no es tan difícil, incluso puedes crear tu propio administrador como explican en el manual: http://php.net/manual/es/function.se...on-handler.php

Ya teniendo tu función personalizada, en caso de algún error lanzas una excepción:
Código PHP:
Ver original
  1. try {
  2.     // Aquí intentas realizar una consulta SQL
  3. } catch(Exception $e) {
  4.     // Si solo deseas mostrar el mensaje del error:
  5.     echo $e->getMessage();
  6.  
  7.     // Si tienes tu propia función para manejo de errores:
  8.     paginaError($e->getMessage());
  9.  
  10.     // Si tienes tu propia función para manejo de excepciones:
  11.     throw new Exception($e->getMessage());
  12. }

Seguramente con esto verás mensajes como los que mencionas acerca de llaves duplicadas o violación de FK; aparte, evitarás anteponer la @ a funciones que pueden generar error, además de obtener un mensaje explícito del error.
__________________
- León, Guanajuato
- GV-Foto

Etiquetas: bd, errores, postgresql, registro, select, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:50.