Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/03/2017, 05:48
Avatar de JuJoGuAl
JuJoGuAl
 
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 14 años, 9 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...