<?
//[Advertencia]: No modifique sin permiso
//------------------------------------------------ ------------------------------------------
//------------------------------------------------ ------------------------------------------
//
// [Nombre de archivo]: c_ora_db.inc
// [Función]: clase de función pública de Oracle
// [Autor]: Tian Hui
//
// [Fecha de última modificación]: 2001/05/11[cxx]
// [Reglas de definición de variables]: 'C_'=Tipo de carácter,'I_'=Tipo de entero,'N_'=Tipo de número,'L_'=Tipo booleano,'A_'=Tipo de matriz
//------------------------------------------------ ------------------------------------------
//------------------------------------------------ ------------------------------------------
// ※db_logon() abre la conexión a la base de datos
// ※db_query() selección general
// ※db_change() Función universal para cambios en la base de datos (insertar, eliminar, actualizar)
// ※insertar db_insert(), llamar a db_change() directamente
// ※db_delete() eliminar, llamar a db_change() directamente
// ※actualización db_update(), llama directamente a db_change()
// ※db_commit() envío de transacción
// ※db_rollback() reversión de transacción
// ※db_logoff() desconecta la conexión de la base de datos
//------------------------------------------------ ------------------------------------------
Clase c_ora_db
{
//------------------------------------------------ ------------------------------------------
// definición de variable
//------------------------------------------------ ------------------------------------------
var $C_user = ""; //Nombre de usuario de la base de datos
var $C_passwd = ""; //Contraseña de la base de datos
var $C_db = ""; //nombre de la base de datos
var $I_linkID = 0; //identificador de conexión
var $I_stmtID = 0; //Identificador de consulta
var $color = ""; //color global
//------------------------------------------------ ------------------------------------------
//------------------------------------------------ ------------------------------------------
// Nombre de la función: db_logon()
// Función: Abrir conexión a la base de datos
// Parámetros: ninguno
//Valor de retorno: identificador de conexión (entero)
// Observaciones: Ninguna
//------------------------------------------------ ------------------------------------------
función db_logon()
{
$this->I_linkID = @OCILogon($this->C_user,$this->C_passwd,$this->C_db);
if ($this->I_linkID == 0){AlertExit('¡Error en el enlace de la base de datos, comuníquese con el DBA!');}
devolver $this->I_linkID;
}
//------------------------------------------------ ------------------------------------------
//------------------------------------------------ ------------------------------------------
// Nombre de la función: db_query($C_sql,$A_define="",$I_start=-1,$I_end=-1)
// Función: seleccionar
// Parámetro: sentencia sql $C_sql
// $A_define campos a vincular. tipo de matriz
// $I_start comienza a buscar registros - 1 buscará todos los registros de la consulta
// $I_end finaliza la búsqueda de registros
//Valor de retorno: matriz bidimensional ($A_rs)
// Observaciones: Se puede acceder al valor del campo correspondiente mediante los números 0,1,2.... o también se puede acceder al valor del campo correspondiente consultando el nombre del campo.
// Por ejemplo, se puede acceder al campo NOMBRE del primer registro a través de $A_rs[0][0] o $A_rs[0]['NAME'] o $A_rs[0]['name']
// $I_start, $I_end son parámetros utilizados con paginación.
//------------------------------------------------ ------------------------------------------
función db_query($C_sql,$A_define="",$I_start=-1,$I_end=-1)
{
if (!$C_sql){AlertExit("¡Parámetros incompletos!");}//Verificar parámetros
//detección de conexión
if ($this->I_linkID == 0){AlertExit('¡Error en el enlace de la base de datos, comuníquese con el DBA!');}
//detección de formato
$esto -> I_stmtID = OCIParse($esto -> I_linkID,$C_sql);
if (!$this -> I_stmtID){AlertExit('¡Error de formato SQL! Comuníquese con el programador');}
//Si el campo enlazado no está especificado, obtenlo de la declaración SQL
si($A_define=="")
{
$A_Cur = explotar("seleccionar",$C_sql);
$A_Cur = explotar("desde",$A_Cur[1]);
$A_define = explotar(",",$A_Cur[0]);
}
//Vincular campos de la tabla de la base de datos
if(gettype($A_define) == "array") //La columna de consulta es una matriz
{
para($i=0;$i<count($A_define);$i++)
{
$A_define_up[$i] = trim(strtoupper($A_define[$i])); //Capitalizar y eliminar espacios
}
para($i=0;$i<count($A_define_up);$i++)
{
OCIDefineByName($this -> I_stmtID,"$A_define_up[$i]",&$$A_define[$i]);
}
}
elseif(trim($A_define) <> "") //Solo hay una columna de consulta
{
$A_define_up = trim(strtoupper($A_define));
OCIDefineByName($this -> I_stmtID,"$A_define_up",&$$A_define);
}
//Ejecutar la sentencia SQL enlazada
if(!OCIExecute($this -> I_stmtID))
{
echo "<font color=red><b>Error de ejecución:</b></font>Error de SQL:<font color=red>$C_sql</font><br>";
devolver falso;
}
$lower = 0; //Devuelve la variable de control de subíndice de la primera dimensión de la matriz bidimensional
$cnt = 0; //Comenzar a buscar el identificador
//Obtener registros
mientras (OCIFetchInto($this -> I_stmtID,&$cur,OCI_ASSOC))
{
//Obtener todos los registros consultados
si ($I_inicio == -1)
{
if (gettype($A_define) == "array") //La columna de consulta es una matriz
{
para ($i=0;$i<count($A_define);$i++)
{
si ($cur[$A_define_up[$i]] <> $$A_define[$i])
{
$$A_define[$i] = $cur[$A_define_up[$i]];
}
$A_rs[$lower][$i] = $$A_define[$i] //Acceso con números
$A_rs[$lower][$A_define[$i]] = $$A_define[$i] //Usar acceso más pequeño;
$A_rs[$lower][$A_define_up[$i]] = $$A_define[$i] //Acceso en mayúsculas
}
}
elseif (trim($A_define) <> "") //Solo hay una columna de consulta
{
si ($cur[$A_define_up] <> $$A_define)
{
$$A_define = $cur[$A_define_up];
}
$A_rs[$lower][0] = $$A_define //Acceso con números
$A_rs[$lower][$A_define] = $$A_define //Acceso en minúsculas
$A_rs[$lower][$A_define_up] = $$A_define //Usar acceso mayor;
}
$inferior++; //Subíndice más uno
}
//Recuperar registros especificados (usados con paginación)
si ($I_inicio <> -1)
{
si ($cnt >= $I_inicio)
{
$ct++;
si ($I_end - $I_start <> 0)
{
$I_end--;
si (gettype($A_define) == "matriz")
{
para($i=0;$i<count($A_define_up);$i++)
{
si ($cur[$A_define_up[$i]] <> $$A_define[$i])
{
$$A_define[$i] = $cur[$A_define_up[$i]];
}
$A_rs[$lower][$i] = $$A_define[$i] //Acceso con números
$A_rs[$lower][$A_define[$i]] = $$A_define[$i] //Usar acceso más pequeño;
$A_rs[$lower][$A_define_up[$i]] = $$A_define[$i] //Acceso en mayúsculas
}
}elseif(recortar($A_define) <> "")
{
si ($cur[$A_define_up] <> $$A_define)
{
$$A_define = $cur[$A_define_up];
}
$A_rs[$lower][0] = $$A_define //Acceso con números
$A_rs[$lower][$A_define] = $$A_define //Usar acceso más pequeño;
$A_rs[$lower][$A_define_up] = $$A_define //Acceso en mayúsculas;
}
$inferior++;
}demás
{
break; //Si $I_end-$I_start=0, significa buscar el registro y saltar fuera del bucle while;
}
}demás
{
$cnt++; //Si $cnt<$I_start,$cnt++
}
}
} //Fin del tiempo
//Libera el identificador y devuelve los datos de la consulta (una matriz bidimensional)
OCIFreestatement($this -> I_stmtID);
devolver $A_rs;
} //Fin de la función
//------------------------------------------------ ------------------------------------------
//------ -------------------------------------------------- ----------------------------------
// Nombre de la función: db_change($C_sql,$A_bind)
// Función: cambio de base de datos
// Parámetro: sentencia sql $C_sql
// $A_bind campos a vincular. tipo de matriz
//Valor de retorno: valor booleano
// Nota: insertar, eliminar y actualizar son comunes
//------------------------------------------------ ------------------------------------------
función db_change($C_sql,$A_bind="")
{
if (!$C_sql){AlertExit("¡Parámetros incompletos!");}//Verificar parámetros
//detección de conexión
if($this -> I_linkID==""){ AlertExit("Nuestra base de datos está ocupada, ¡conéctese nuevamente más tarde!");}
//detección de formato
$esto -> I_stmtID = OCIParse($esto -> I_linkID,$C_sql);
if (!$this -> I_stmtID){AlertExit('¡Error de formato SQL! Comuníquese con el programador');}
//Unir
if(gettype($A_bind) == "matriz")
{
para($i=0;$i<count($A_bind);$i++)
{
global $$A_bind[$i];
$$A_bind[$i] = StripSlashes($$A_bind[$i]); //Eliminar caracteres de barra invertida
$$A_bind[$i] = str_replace("<?","<?",$$A_bind[$i]); //Filtrar etiquetas PHP
}
para($i=0;$i<count($A_bind);$i++){
OCIBindByName($this -> I_stmtID, ":$A_bind[$i]", &$$A_bind[$i], -1);
}
}
elseif(trim($A_bind) <> "") //No es una matriz, sino un carácter
{
global$$A_bind;
$$A_bind = StripSlashes($$A_bind);
$$A_bind = str_replace("<?","<?",$$A_bind //Filtrar etiquetas PHP
OCIBindByName($this -> I_stmtID, ":$arrBind", &$$A_bind, -1);
}
//Ejecutar y verificar si fue exitoso
if(!OCIExecute($this -> I_stmtID,OCI_DEFAULT))
{
echo "<font color=red><b>Error de ejecución:</b></font>Error de SQL:<font color=red>$C_sql</font><br>";
devolver falso;
}
/*//Devuelve el número de filas afectadas
global $I_cambionum;
$I_changenum = OCINumrows($this -> I_stmtID);*/
//Libera el identificador y devuelve el valor.
OCIFreeStatement($this -> I_stmtID);
devolver verdadero;
}
//------------------------------------------------ ------------------------------------------
//------ -------------------------------------------------- ----------------------------------
// Nombre de la función: db_delete($C_sql)
// Función: eliminar
// Parámetro: instrucción sql C_sql
//Valor de retorno: valor booleano
// Nota: Esta función es sólo para uso intuitivo, esencialmente llamando a db_change()
//------------------------------------------------ ------------------------------------------
función db_delete($C_sql)
{
devolver $esto -> db_change($C_sql);
}
//------------------------------------------------ ------------------------------------------
//------ -------------------------------------------------- ----------------------------------
// Nombre de la función: db_insert($C_sql,A_bind)
// Función: insertar
// Parámetro: instrucción sql C_sql
// enlace A_bind
//Valor de retorno: valor booleano
// Nota: Esta función es sólo para uso intuitivo, esencialmente llamando a db_change()
//------------------------------------------------ ------------------------------------------
función db_insert($C_sql,$A_bind="")
{
devolver $this -> db_change($C_sql,$A_bind);
}
//------------------------------------------------ ------------------------------------------
//------ -------------------------------------------------- ----------------------------------
// Nombre de la función: db_update($C_sql,A_bind)
// Función: actualizar
// Parámetro: instrucción sql C_sql
// enlace A_bind
//Valor de retorno: valor booleano
// Nota: Esta función es sólo para uso intuitivo, esencialmente llamando a db_change()
//------------------------------------------------ ------------------------------------------
función db_update($C_sql,$A_bind="")
{
devolver $this -> db_change($C_sql,$A_bind);
}
//------------------------------------------------ ------------------------------------------
//------ -------------------------------------------------- ----------------------------------
// Nombre de la función: db_commit()
// Función: envío de transacciones
// Parámetros: ninguno
//Valor de retorno: valor booleano
// Observaciones: Ninguna
//------------------------------------------------ ------------------------------------------
función db_commit()
{
retorno (OCICommit($this->I_linkID));
}
//------------------------------------------------ ------------------------------------------
//------ -------------------------------------------------- ----------------------------------
// Nombre de la función: db_rollback()
// Función: reversión de transacción
// Parámetros: ninguno
//Valor de retorno: valor booleano
// Observaciones: Ninguna
//------------------------------------------------ ------------------------------------------
función db_rollback()
{
retorno (OCIRollback($this->I_linkID));
}
//------------------------------------------------ ------------------------------------------
//------------------------------------------------ ------------------------------------------
// Nombre de la función: db_logoff()
// Función: desconectar la conexión de la base de datos
// Parámetros: ninguno
//Valor de retorno: valor booleano
// Observaciones: Ninguna
//------------------------------------------------ ------------------------------------------
función db_logoff()
{
retorno (OCILogoff($this->I_linkID));
}
//------------------------------------------------ ------------------------------------------
//------------------------------------------------ ------------------------------------------
}
?>