<?
//[Aviso]: Por favor, não modifique sem permissão
//------------------------------------------------ ------------------------------------------
//------------------------------------------------ ------------------------------------------
//
// [Nome do arquivo]: c_ora_db.inc
// [Função]: classe de função pública Oracle
// [Autor]: Tian Hui
//
// [Data da última modificação]: 11/05/2001[cxx]
// [Regras de definição de variáveis]: 'C_'=Tipo de caractere,'I_'=Tipo inteiro,'N_'=Tipo numérico,'L_'=Tipo booleano,'A_'=Tipo array
//------------------------------------------------ ------------------------------------------
//------------------------------------------------ ------------------------------------------
// ※db_logon() abre a conexão com o banco de dados
// ※db_query() seleção geral
// ※db_change() Função universal para alterações no banco de dados (inserir, excluir, atualizar)
// ※db_insert() insere, chama db_change() diretamente
// ※db_delete() exclui, chama db_change() diretamente
// ※db_update() atualização, chama diretamente db_change()
// ※db_commit() envio de transação
// ※db_rollback() reversão de transação
// ※db_logoff() desconecta a conexão com o banco de dados
//------------------------------------------------ ------------------------------------------
Classe c_ora_db
{
//------------------------------------------------ ------------------------------------------
// definição de variável
//------------------------------------------------ ------------------------------------------
var $C_user = ""; //Nome de usuário do banco de dados
var $C_passwd = ""; //senha do banco de dados
var $C_db = ""; //nome do banco de dados
var $I_linkID = 0; //Identificador de conexão
var $I_stmtID = 0; //Identificador de consulta
var $cor = ""; //cor global
//------------------------------------------------ ------------------------------------------
//------------------------------------------------ ------------------------------------------
//Nome da função: db_logon()
//Função: Abrir conexão com banco de dados
// Parâmetros: nenhum
//Valor de retorno: identificador de conexão (inteiro)
// Observações: Nenhuma
//------------------------------------------------ ------------------------------------------
função db_logon()
{
$this->I_linkID = @OCILogon($this->C_user,$this->C_passwd,$this->C_db);
if ($this->I_linkID == 0){AlertExit('Falha no link do banco de dados, entre em contato com o DBA!');}
retorne $this->I_linkID;
}
//------------------------------------------------ ------------------------------------------
//------------------------------------------------ ------------------------------------------
// Nome da função: db_query($C_sql,$A_define="",$I_start=-1,$I_end=-1)
//Função: selecionar
// Parâmetro: instrução sql $C_sql
// $A_define campos a serem vinculados. tipo de matriz
// $I_start inicia a busca de registros - 1 irá buscar todos os registros da consulta
// $I_end termina a busca de registros
//Valor de retorno: array bidimensional ($A_rs)
// Observações: O valor do campo correspondente pode ser acessado através dos números 0,1,2.... ou o valor do campo correspondente também pode ser acessado consultando o nome do campo.
// Por exemplo, o campo NAME do primeiro registro pode ser acessado através de $A_rs[0][0] ou $A_rs[0]['NAME'] ou $A_rs[0]['name']
// $I_start, $I_end são parâmetros usados com paginação.
//------------------------------------------------ ------------------------------------------
função db_query($C_sql,$A_define="",$I_start=-1,$I_end=-1)
{
if (!$C_sql){AlertExit("Parâmetros incompletos!");}//Verificar parâmetros
//Detecção de conexão
if ($this->I_linkID == 0){AlertExit('Falha no link do banco de dados, entre em contato com o DBA!');}
//Detecção de formato
$this -> I_stmtID = OCIParse($this -> I_linkID,$C_sql);
if (!$this -> I_stmtID){AlertExit('Erro no formato SQL! Entre em contato com o programador');}
//Se o campo vinculado não for especificado, obtenha-o na instrução SQL
if($A_define=="")
{
$A_Cur = explodir("selecionar",$C_sql);
$A_Cur = explodir("de",$A_Cur[1]);
$A_define = explode(",",$A_Cur[0]);
}
// Vincula os campos da tabela do banco de dados
if(gettype($A_define) == "array") //A coluna de consulta é um array
{
for($i=0;$i<contagem($A_define);$i++)
{
$A_define_up[$i] = trim(strtoupper($A_define[$i])); //Capitalizar e remover espaços
}
for($i=0;$i<count($A_define_up);$i++)
{
OCIDefineByName($this -> I_stmtID,"$A_define_up[$i]",&$$A_define[$i]);
}
}
elseif(trim($A_define) <> "") //Há apenas uma coluna de consulta
{
$A_define_up = trim(strtoupper($A_define));
OCIDefineByName($this -> I_stmtID,"$A_define_up",&$$A_define);
}
//Executa a instrução SQL vinculada
if(!OCIExecute($this -> I_stmtID))
{
echo "<font color=red><b>Erro de execução:</b></font>Erro SQL:<font color=red>$C_sql</font><br>";
retornar falso;
}
$lower = 0; //Retorna a variável de controle subscrito da primeira dimensão do array bidimensional
$cnt = 0; //Começa a buscar o identificador
//Obter registros
while (OCIFetchInto($this -> I_stmtID,&$cur,OCI_ASSOC))
{
//Obtém todos os registros consultados
se ($I_start == -1)
{
if (gettype($A_define) == "array") //A coluna de consulta é um array
{
para ($i=0;$i<contagem($A_define);$i++)
{
if ($cur[$A_define_up[$i]] <> $$A_define[$i])
{
$$A_define[$i] = $cur[$A_define_up[$i]];
}
$A_rs[$lower][$i] = $$A_define[$i];
$A_rs[$lower][$A_define[$i]] = $$A_define[$i];
$A_rs[$lower][$A_define_up[$i]] = $$A_define[$i];
}
}
elseif (trim($A_define) <> "") //Há apenas uma coluna de consulta
{
if ($cur[$A_define_up] <> $$A_define)
{
$$A_define = $cur[$A_define_up];
}
$A_rs[$lower][0] = $$A_define; //Acesso com números
$A_rs[$lower][$A_define] = $$A_define; //Acesso em letras minúsculas
$A_rs[$lower][$A_define_up] = $$A_define; //Use acesso maior
}
$inferior++; //Subscrito mais um
}
//Recupera registros especificados (usados com paginação)
se ($I_start <> -1)
{
if ($cnt >= $I_start)
{
$cnt++;
if ($I_end - $I_start <> 0)
{
$eu_fim--;
if (gettype($A_define) == "matriz")
{
for($i=0;$i<count($A_define_up);$i++)
{
if ($cur[$A_define_up[$i]] <> $$A_define[$i])
{
$$A_define[$i] = $cur[$A_define_up[$i]];
}
$A_rs[$lower][$i] = $$A_define[$i];
$A_rs[$lower][$A_define[$i]] = $$A_define[$i];
$A_rs[$lower][$A_define_up[$i]] = $$A_define[$i];
}
}elseif(trim($A_define) <> "")
{
if ($cur[$A_define_up] <> $$A_define)
{
$$A_define = $cur[$A_define_up];
}
$A_rs[$lower][0] = $$A_define; //Acesso com números
$A_rs[$lower][$A_define] = $$A_define; //Use acesso menor
$A_rs[$lower][$A_define_up] = $$A_define; //Acesso em maiúsculas
}
$inferior++;
}outro
{
break; //Se $I_end-$I_start=0, significa buscar o registro e sair do loop while
}
}outro
{
$cnt++; //Se $cnt<$I_start,$cnt++;
}
}
} //Fim do while
//Libere o identificador e retorne os dados da consulta (um array bidimensional)
OCIFreestatement($this -> I_stmtID);
retornar $A_rs;
} //Fim da função
//------------------------------------------------ ------------------------------------------
//------ -------------------------------------------------- ----------------------------------
// Nome da função: db_change($C_sql,$A_bind)
//Função: alteração do banco de dados
// Parâmetro: instrução sql $C_sql
// $A_bind campos a serem vinculados. tipo de matriz
//Valor de retorno: valor booleano
// Nota: inserir, excluir, atualizar são comuns
//------------------------------------------------ ------------------------------------------
função db_change($C_sql,$A_bind="")
{
if (!$C_sql){AlertExit("Parâmetros incompletos!");}//Verificar parâmetros
//Detecção de conexão
if($this -> I_linkID==""){ AlertExit("Nosso banco de dados está ocupado, conecte-se novamente mais tarde!");}
//Detecção de formato
$this -> I_stmtID = OCIParse($this -> I_linkID,$C_sql);
if (!$this -> I_stmtID){AlertExit('Erro no formato SQL! Entre em contato com o programador');}
//Vincular
if(gettype($A_bind) == "matriz")
{
for($i=0;$i<contagem($A_bind);$i++)
{
global $$A_bind[$i];
$$A_bind[$i] = StripSlashes($$A_bind[$i]); //Remover caracteres de barra invertida
$$A_bind[$i] = str_replace("<?","< ?",$$A_bind[$i]);
}
for($i=0;$i<count($A_bind);$i++){
OCIBindByName($this -> I_stmtID, ":$A_bind[$i]", &$$A_bind[$i], -1);
}
}
elseif(trim($A_bind) <> "") //Não é um array, mas um caractere
{
global$$A_bind;
$$A_bind = StripSlashes($$A_bind);
$$A_bind = str_replace("<?","< ?",$$A_bind); //Filtrar tags PHP
OCIBindByName($this -> I_stmtID, ":$arrBind", &$$A_bind, -1);
}
//Executa e verifica se foi bem sucedido
if(!OCIExecute($this -> I_stmtID,OCI_DEFAULT))
{
echo "<font color=red><b>Erro de execução:</b></font>Erro SQL:<font color=red>$C_sql</font><br>";
retornar falso;
}
/*//Retorna o número de linhas afetadas
global$I_changenum;
$I_changenum = OCINumrows($this -> I_stmtID);*/
//Solte o handle e retorne o valor
OCIFreeStatement($this -> I_stmtID);
retornar verdadeiro;
}
//------------------------------------------------ ------------------------------------------
//------ -------------------------------------------------- ----------------------------------
//Nome da função: db_delete($C_sql)
//Função: excluir
// Parâmetro: instrução C_sql sql
//Valor de retorno: valor booleano
// Nota: Esta função é apenas para uso intuitivo, essencialmente chamando db_change()
//------------------------------------------------ ------------------------------------------
função db_delete($C_sql)
{
retorne $isto -> db_change($C_sql);
}
//------------------------------------------------ ------------------------------------------
//------ -------------------------------------------------- ----------------------------------
// Nome da função: db_insert($C_sql,A_bind)
//Função: inserir
// Parâmetro: instrução C_sql sql
// Ligação A_bind
//Valor de retorno: valor booleano
// Nota: Esta função é apenas para uso intuitivo, essencialmente chamando db_change()
//------------------------------------------------ ------------------------------------------
função db_insert($C_sql,$A_bind="")
{
retornar $isto -> db_change($C_sql,$A_bind);
}
//------------------------------------------------ ------------------------------------------
//------ -------------------------------------------------- ----------------------------------
// Nome da função: db_update($C_sql,A_bind)
//Função: atualizar
// Parâmetro: instrução C_sql sql
// Ligação A_bind
//Valor de retorno: valor booleano
// Nota: Esta função é apenas para uso intuitivo, essencialmente chamando db_change()
//------------------------------------------------ ------------------------------------------
função db_update($C_sql,$A_bind="")
{
retornar $isto -> db_change($C_sql,$A_bind);
}
//------------------------------------------------ ------------------------------------------
//------ -------------------------------------------------- ----------------------------------
//Nome da função: db_commit()
// Função: envio de transação
// Parâmetros: nenhum
//Valor de retorno: valor booleano
// Observações: Nenhuma
//------------------------------------------------ ------------------------------------------
função db_commit()
{
retornar (OCICommit($this->I_linkID));
}
//------------------------------------------------ ------------------------------------------
//------ -------------------------------------------------- ----------------------------------
//Nome da função: db_rollback()
//Função: reversão de transação
// Parâmetros: nenhum
//Valor de retorno: valor booleano
// Observações: Nenhuma
//------------------------------------------------ ------------------------------------------
função db_rollback()
{
retornar (OCIRolback($this->I_linkID));
}
//------------------------------------------------ ------------------------------------------
//------------------------------------------------ ------------------------------------------
//Nome da função: db_logoff()
//Função: Desconectar a conexão com o banco de dados
// Parâmetros: nenhum
//Valor de retorno: valor booleano
// Observações: Nenhuma
//------------------------------------------------ ------------------------------------------
função db_logoff()
{
return (OCILogoff($this->I_linkID));
}
//------------------------------------------------ ------------------------------------------
//------------------------------------------------ ------------------------------------------
}
?>