Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   PHP (https://www.clubdelphi.com/foros/forumdisplay.php?f=15)
-   -   PHP y postgresql (https://www.clubdelphi.com/foros/showthread.php?t=41384)

halizia 14-03-2007 13:53:46

PHP y postgresql
 
Hola!!

tengo una base de datos en postgresql y necesito consultar de unas vistas, el nombre de las vistas lo creo dinámicamente con PHP, pero a veces esas vistas no existen, (ya que son vistas que recuperan datos de la bd, y hay dias en lo que no hay datos y por eso no existen) pero al consultar alguna vista que no esta creada:
warning: g_query() [function.pg-query]: Query failed: ERROR: no existe la relacion «ism_values_1091»

quisiera saber cómo puedo saber si la vista existe o no antes de ejecutar la consulta y me de el warning.


Saludos!!

lucasarts_18 14-03-2007 14:40:22

Hola:

Yo lo veo de dos formas:
  1. Cada motor de base de datos maneja o controla los errores, en este caso debería develver un número que identifique que el objeto no existe, de esta forma podrías capturarlo desde Php.
  2. Lo otro es usar bloques de captura de error como se hace en delphi (Try...Except)
Hasta Luego .-

halizia 14-03-2007 14:44:47

puedes poner un ejemplo??
Gracias!

lucasarts_18 14-03-2007 14:54:58

Código PHP:

function asignarProfesor ($dbh,$codasig,$nomasig){
    
    global 
$mensaje;
    
    foreach (
$_REQUEST['borrar'] as $keyRun => $run) {
         
         
$result $dbh->prepare("insert into sig_profesor_asignatura 
                                      (id_asignatura_cso,run_prof,hrs_prof_asig)
                                          values (?,?,?)"
);
            
        
$run quita_guionrun($run);         
            
$datos = array($codasig,$run,0);
            
            
$result $dbh->execute($result,$datos);
            
            if (
PEAR::isError($result)) {
            
            if (
$result->getCode() == -3)
                
$mensaje 'Ha seleccionado un profesor que ya existe RUN:'.$run;
            else
                
$mensaje $result->getDebugInfo();
                
            
$flagError 1;
            break;
        }
       }
       if (
$flagError == 0) {
           
$nomasig strtolower($nomasig);
           
header ("Location: asig_prof_asignatura.php?codasig=$codasig&nomasig=$nomasig");
           exit;
       }


Aquí capturo el error de registro duplicado, para capturar un error de un objeto inexiste es similar ya que cada motor de base de datos devuelve un número constante del error provocado.

Me imagino si haces una consulta sobre dicha vista sobre un Front-End para PostgreSQL devería mostrarte un error en caso de no encontrarlo, acompañado del código y una descripción, cada motor de base de datos lo hace, por lo menos con los que he trabajado (Oracle, MS-SQL Server, MySQL).

Con lo que te he entregado ya tienes como investigar....:cool:

Hasta Luego .-


La franja horaria es GMT +2. Ahora son las 06:17:27.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi