<?php
# informix_fns.php : Funciones para interactuar con BDs en Informix
# 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-11


// Función que contiene el string de conexión para conectarse con el servidor Informix y que se conecta a éste,
// recibe como único parámetro el nombre de la base de datos a la que se desea conectar
/* resource fco_db_connect(string) */
function fco_db_connect($db) { return fco_db_ifx_connect('username''password'$db); }

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

// Función que abre una conexión con el servidor Informix
/* int fco_db_ifx_connect(string, string, string) */
function fco_db_ifx_connect($username$pwd$db)
{
    if(@
$link =ifx_connect($db$username$pass))
        return 
$link;
    
fco_db_display_last_error("Error al tratar de abrir la conexión con la base de datos");
}

// Función que abre una conexión persistente con el servidor Informix
/* int fco_db_ifx_pconnect(string, string, string) */
function fco_db_ifx_pconnect($username$pwd$db)
{
    if(@
$link =ifx_pconnect($db$username$pass))
        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 Informix
/* void fco_db_close(resource) */
function fco_db_close($db)
{
    if(!
ifx_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)
{
    if(@
$res ifx_query($qry$db))
        return 
$res;
    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)
{
    if(@
$res ifx_query($qry$db))
        return 
$res;
    else
        
fco_db_last_error();
    return 
0;
}

// 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)
{
    return 
ifx_fetch_row($res);
}

// 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 
ifx_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 
ifx_num_fields($res);
}

//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 TOP 1";
    
$res fco_db_query($db$qry);
    return 
ifx_fieldtypes($res)
}

// 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 ifx_errormsg(); 
}

// Función que despliega el último error que nos manda el servidor Informix 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);
}
?>