<?php
# oracle_fns.php : Funciones para interactuar con BDs en Oracle
# Derechos Reservados (c) 2004-2006 Francisco Javier Carlos Rivera <javier@nediam.com.mx>
# Copyright (c) 2004-2006 Francisco Javier Carlos Rivera <javier@nediam.com.mx>
# Este código es Open Source, está bajo los términos de la licencia MIT Licence
# Última fecha de modificación: 2006-06-15


// Función que contiene el string de conexión para conectarse con el servidor Oracle y que se conecta a éste,
// recibe como único parámetro el nombre de la base de datos/usuario (en Oracle sólo hay un usuario por bd) a la que se desea conectar
/* resource fco_db_connect(string) */
function fco_db_connect($db) { return fco_db_ora_connect('host''port'$db'password'$sid); }

// Función similar a la de fco_db_connect, pero aquí la conexión que se establece con el servidor Oracle es persistente
/* resource fco_db_pconnect(string) */
function fco_db_connect($db) { return fco_db_ora_pconnect('host''port'$db'password'$sid); }

// Función que abre una conexión con el servidor Oracle
// El parámetro host puede ser una dirección IP o un hostname
/* resource fco_db_pg_connect(string, string, string, string, string) */
function fco_db_pg_pconnect($host$port$db$pwd$sid)
{
    
$conn_str '(DESCRIPTION =
                 (ADDRESS =
                     (PROTOCOL = TCP)
                     (HOST =' 
$host ')
                     (PORT =' 
$port ')
                 )
                   (CONNECT_DATA = (SID =' 
$sid '))
            )'
;
    if(@
$link oci_connect($db$pwd$conn_str))
        return 
$link;
    
fco_db_display_last_error("Error al tratar de abrir la persistente con la base de datos");
}

// Función que abre una conexión persistente con el servidor Oracle
// El parámetro host puede ser una dirección IP o un hostname
/* resource fco_db_pg_pconnect(string, string, string, string) */
function fco_db_pg_pconnect($host$port$db$pwd$sid)
{
    
$conn_str '(DESCRIPTION =
                 (ADDRESS =
                     (PROTOCOL = TCP)
                     (HOST =' 
$host ')
                     (PORT =' 
$port ')
                 )
                   (CONNECT_DATA = (SID =' 
$sid '))
            )'
;
    if(@
$link oci_pconnect($db$pwd$conn_str))
        return 
$link;
    
fco_db_display_last_error("Error al tratar de abrir la conexión persistente con la base de datos");
}

// Función que cierra la conexión con el servidor Oracle
/* void fco_db_close(resource) */
function fco_db_close($db)
{
    if(!
oci_close($db))
    {
        
fco_db_last_error();
        
fco_db_display_last_error("Error al tratar de cerrar la conexión con la base de datos");
    }
}


// Función que ejecuta una sentencia sql y regresa el query result resource y en caso de error despliega el mensaje de error
/* resource fco_db_query(resource, string) */
function fco_db_query($db$qry)
{
    
$pars oci_parse($db$qry);
    if(@
$res oci_execute($parsOCI_COMMIT_ON_SUCCESS))
        return 
$pars;
    else
    {
        
fco_db_last_error();
        
fco_db_display_last_error("Error al tratar de ejecutar la consulta en la base de datos: $qry");
    }
}

// Función que ejecuta una sentencia sql y regresa el query result resource y en caso de error regresa 0
// Esta función es útil cuando se quiere hacer el manejo de errores directamente en los scripts
/* resource/int fco_db_query2(resource, string) */
function fco_db_query2($db$qry)
{
    
$pars oci_parse($db$qry);
    if(@
$res oci_execute($parsOCI_COMMIT_ON_SUCCESS))
        return 
$pars;
    else
        
fco_db_last_error();
    return 
0;
}

// Función que regresa un arreglo con los valores del siguiente renglón del result resource que recibe como parámetro
/* array fco_db_fetch_row(resource) */
function fco_db_fetch_row($res)
{
    return 
oci_fetch_row($res);
}

// Función que regresa un arreglo asociativo con los valores del siguiente renglón del result resource que recibe como parámetro
/* array fco_db_fetch_array(resource) */
function fco_db_fetch_array($res)
{
    
$row=oci_fetch_array($rsOCI_ASSOC);
    
$temp=0;
    foreach(
$row as $key => $val)
    {
        
$temp2[$temp]=strtolower($key);
        
$temp++;
    }
    
$temp3=0;
    foreach(
$row as $dato)
    {
        
$array2[$temp2[$temp3]]=$dato;
        
$temp3++;
    }
    unset (
$temp);
    unset (
$temp2);
    unset (
$temp3);
    return 
$array2;
}

// Función que regresa un arreglo asociativo con todos los renglónes del result resource que recibe como parámetro
/* array fco_db_fetch_all(resource) */
function fco_db_fetch_all($res)
{    
    
$resul oci_fetch_all($res$arr);
    foreach(
$arr as $key => $val)
        
$name=$key;
    for(
$i=0$i<$resul;$i++)
    {
        foreach(
$arr as $data)
        {
            
$arr2[$i]=array(trim($data[$i]));
        }
    }
    return 
$arr2;
}

// Función que regresa un entero con el número de renglónes que contiene el result resource que recibe como parámetro
/* int fco_db_num_rows(resource)*/
function fco_db_num_rows($res)
{
    return 
oci_num_rows($res);
}

// Función que regresa un entero con el número de campos que contiene el result resource que recibe como parámetro
/* int fco_db_num_fields(resource)*/
function fco_db_num_fields($res)
{
    return 
oci_num_fields($res);
}

// Función que regresa un nombre del campo del result resource que recibe como parámetro
/* string fco_db_field_name(resource, int) */
function fco_db_field_name($res$field_number)
{
    return 
strtolower(oci_field_name($res$field_number));
}

// Función que regresa el tipo de dato del campo del result resource que recibe como parámetro
/* string fco_db_field_type(resource, int) */
function fco_db_field_type($res$field_number)
{
    return 
strtolower(oci_field_type($res$field_number));
}


//Función que regresa un arreglo asociativo con los nombres y tipos de datos de los campos una tabla
/* array fco_db_table_types(resource, string) */
function fco_db_table_types($db$table_name)
{
    
$qry "SELECT * FROM $table_name where rownum=1";
    
$res fco_db_query($db$qry))
    for(
$i=1$i<=oci_num_fields($res); $i++)
        
$types[fco_db_field_name($res$i)] = fco_db_field_type($res$i);
    return 
$types;
}

// Función que guarda la descripción del último error en una variable global
/* void fco_db_last_error() */
function fco_db_last_error()
{
    global 
$error_desc;
    
$error_desc oci_error();
}

// Función que despliega el último error que nos manda el servidor PostgreSQL y finaliza el script
/* void fco_db_display_last_error(string, string, string) */
function fco_db_display_last_error($error_title$path='../'$txt='')
{
    global 
$error_desc;
    
//display_header($path); se puede útilizar una función que despliegue todo el encabezado
    
echo "<html>\n<body>\n";
    echo 
"<br><h3><b>" $error_title "</b><br><br>\n";
    if(
$error_desc) echo "Descripción: " $error_desc "<br>\n";
    if(
$txt) echo $txt;
    echo 
"</h3><br>\n";
    
//display_footer(); se puede útilizar una función que despliegue todo el pie de página
    
echo "</body>\n</html>\n";
    exit(
1);
}
?>