<?
//[Предупреждение]: Пожалуйста, не изменяйте без разрешения.
//------------------------------------------------ ------------------------------------------
//------------------------------------------------ ------------------------------------------
//
// [Имя файла]: c_ora_db.inc
// [Функция]: класс общедоступной функции Oracle
// [Автор]: Тянь Хуэй
//
// [Дата последнего изменения]: 2001/05/11[cxx]
// [Правила определения переменных]: 'C_'=Символьный тип,'I_'=Целый тип,'N_'=Числовой тип,'L_'=Булевый тип,'A_'=Тип массива
//------------------------------------------------ ------------------------------------------
//------------------------------------------------ ------------------------------------------
// ※db_logon() открывает соединение с базой данных
// общий выбор ※db_query()
// ※db_change() Универсальная функция для изменений базы данных (вставка, удаление, обновление)
// Вставка ※db_insert(), вызов db_change() напрямую
// ※db_delete() удалить, вызвать db_change() напрямую
// обновление ※db_update(), прямой вызов db_change()
// Отправка транзакции ※db_commit()
// ※db_rollback() откат транзакции
// ※db_logoff() отключает соединение с базой данных
//------------------------------------------------ ------------------------------------------
Класс c_ora_db
{
//------------------------------------------------ ------------------------------------------
// определение переменной
//------------------------------------------------ ------------------------------------------
var $C_user = "" //Имя пользователя базы данных
var $C_passwd = ""; //Пароль базы данных
var $C_db = "" //имя базы данных
var $I_linkID = 0 //Дескриптор соединения;
var $I_stmtID = 0 // Дескриптор запроса
var $color = ""; // глобальный цвет
//------------------------------------------------ ------------------------------------------
//------------------------------------------------ ------------------------------------------
// Имя функции: db_logon()
// Функция: открыть соединение с базой данных
// Параметры: нет
//Возвращаемое значение: дескриптор соединения (целое число)
// Примечания: Нет
//------------------------------------------------ ------------------------------------------
функция db_logon()
{
$this->I_linkID = @OCILogon($this->C_user,$this->C_passwd,$this->C_db);
if ($this->I_linkID == 0){AlertExit('Не удалось установить соединение с базой данных, обратитесь к администратору базы данных!');}
верните $this->I_linkID;
}
//------------------------------------------------ ------------------------------------------
//------------------------------------------------ ------------------------------------------
// Имя функции: db_query($C_sql,$A_define="",$I_start=-1,$I_end=-1)
// Функция: выбрать
// Параметр: SQL-оператор $C_sql
// Поля $A_define для привязки. тип массива
// $I_start начинает выборку записей — 1 выберет все записи запроса
// $I_end завершает выборку записей
//Возвращаемое значение: двумерный массив ($A_rs)
// Примечания: Доступ к значению соответствующего поля можно получить через числа 0,1,2.... или значение соответствующего поля также можно получить, запросив имя поля;
// Например, доступ к полю NAME первой записи можно получить через $A_rs[0][0] или $A_rs[0]['NAME'] или $A_rs[0]['name']
// $I_start, $I_end — параметры, используемые при подкачке.
//------------------------------------------------ ------------------------------------------
функция db_query($C_sql,$A_define="",$I_start=-1,$I_end=-1)
{
if (!$C_sql){AlertExit("Неполные параметры!");}//Проверить параметры
//Обнаружение соединения
if ($this->I_linkID == 0){AlertExit('Не удалось установить соединение с базой данных, обратитесь к администратору базы данных!');}
//Обнаружение формата
$this -> I_stmtID = OCIParse($this -> I_linkID,$C_sql);
if (!$this -> I_stmtID){AlertExit('Ошибка формата SQL! Обратитесь к программисту');}
//Если связанное поле не указано, получим его из оператора SQL
если($A_define=="")
{
$A_Cur = взорваться("выбрать",$C_sql);
$A_Cur = взорваться("from",$A_Cur[1]);
$A_define = взорваться(",",$A_Cur[0]);
}
//Привязываем поля таблицы базы данных
if(gettype($A_define) == "array") //Столбец запроса представляет собой массив
{
for($i=0;$i<count($A_define);$i++)
{
$A_define_up[$i] = Trim(strtoupper($A_define[$i])); //Назначаем заглавные буквы и удаляем пробелы
}
for($i=0;$i<count($A_define_up);$i++)
{
OCIDefineByName($this -> I_stmtID,"$A_define_up[$i]",&$$A_define[$i]); //Привязка
}
}
elseif(trim($A_define) <> "") //Существует только один столбец запроса
{
$A_define_up = Trim(strtoupper($A_define));
OCIDefineByName($this -> I_stmtID,"$A_define_up",&$$A_define);
}
//Выполняем связанный оператор SQL
if(!OCIExecute($this -> I_stmtID))
{
echo "<font color=red><b>Ошибка выполнения:</b></font>Ошибка SQL:<font color=red>$C_sql</font><br>";
вернуть ложь;
}
$lower = 0 // Возвращает управляющую переменную индекса первого измерения двумерного массива.
$cnt = 0 //Начало получения идентификатора
//Получаем записи
while (OCIFetchInto($this -> I_stmtID,&$cur,OCI_ASSOC))
{
//Получаем все запрошенные записи
если ($I_start == -1)
{
if (gettype($A_define) == "array") //Столбец запроса представляет собой массив
{
для ($i=0;$i<count($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) <> "") //Существует только один столбец запроса
{
if ($cur[$A_define_up] <> $$A_define)
{
$$A_define = $cur[$A_define_up];
}
$A_rs[$lower][0] = $$A_define //Доступ с помощью чисел
$A_rs[$lower][$A_define] = $$A_define //Доступ в нижнем регистре;
$A_rs[$lower][$A_define_up] = $$A_define //Использовать больший доступ;
}
$lower++; //Индекс плюс один
}
//Получаем указанные записи (используется при подкачке)
если ($I_start <> -1)
{
если ($cnt >= $I_start)
{
$cnt++;
если ($I_end - $I_start <> 0)
{
$I_end--;
если (gettype($A_define) == "массив")
{
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 //Доступ с помощью чисел
$A_rs[$lower][$A_define] = $$A_define //Использовать меньший доступ;
$A_rs[$lower][$A_define_up] = $$A_define //Доступ в верхнем регистре;
}
$ниже++;
}еще
{
перерыв; //Если $I_end-$I_start=0, это означает выборку записи и выход из цикла while;
}
}еще
{
$cnt++ //Если $cnt<$I_start,$cnt++;
}
}
} // Конец времени
//Отпускаем хэндл и возвращаем данные запроса (двумерный массив)
OCIFreestatement($this -> I_stmtID);
вернуть $A_rs;
} // Конец функции
//------------------------------------------------ -----------------------------------------
//------ -------------------------------------------------- ----------------------------------
// Имя функции: db_change($C_sql,$A_bind)
// Функция: изменение базы данных
// Параметр: SQL-оператор $C_sql
// Поля $A_bind для привязки. тип массива
//Возвращаемое значение: логическое значение
// Примечание: вставка, удаление и обновление являются общими
//------------------------------------------------ ------------------------------------------
функция db_change($C_sql,$A_bind="")
{
if (!$C_sql){AlertExit("Неполные параметры!");}//Проверить параметры
//Обнаружение соединения
if($this -> I_linkID==""){ AlertExit("Наша база данных занята, подключитесь позже!");}
//Обнаружение формата
$this -> I_stmtID = OCIParse($this -> I_linkID,$C_sql);
if (!$this -> I_stmtID){AlertExit('Ошибка формата SQL! Обратитесь к программисту');}
//Связывать
if(gettype($A_bind) == "массив")
{
for($i=0;$i<count($A_bind);$i++)
{
глобальный $$A_bind[$i];
$$A_bind[$i] = StripSlashes($$A_bind[$i]); //Удалить символы обратной косой черты
$$A_bind[$i] = str_replace("<?","< ?",$$A_bind[$i]); //Отфильтровать теги PHP
}
for($i=0;$i<count($A_bind);$i++){
OCIBindByName($this -> I_stmtID, ":$A_bind[$i]", &$$A_bind[$i], -1);
}
}
elseif(trim($A_bind) <> "") //Не массив, а символ
{
глобальный $$A_bind;
$$A_bind = StripSlashes($$A_bind);
$$A_bind = str_replace("<?","< ?",$$A_bind //Отфильтровываем теги PHP;
OCIBindByName($this -> I_stmtID, ":$arrBind", &$$A_bind, -1);
}
//Выполняем и проверяем успешность
if(!OCIExecute($this -> I_stmtID,OCI_DEFAULT))
{
echo "<font color=red><b>Ошибка выполнения:</b></font>Ошибка SQL:<font color=red>$C_sql</font><br>";
вернуть ложь;
}
/*//Вернем количество затронутых строк
глобальный $I_changenum;
$I_changenum = OCINumrows($this -> I_stmtID);*/
//Отпускаем дескриптор и возвращаем значение
OCIFreeStatement($this -> I_stmtID);
вернуть истину;
}
//------------------------------------------------ -----------------------------------------
//------ -------------------------------------------------- ----------------------------------
// Имя функции: db_delete($C_sql)
// Функция: удалить
// Параметр: оператор sql C_sql
//Возвращаемое значение: логическое значение
// Примечание. Эта функция предназначена только для интуитивного использования, по существу вызывая db_change()
//------------------------------------------------ ------------------------------------------
функция db_delete($C_sql)
{
вернуть $this -> db_change($C_sql);
}
//------------------------------------------------ -----------------------------------------
//------ -------------------------------------------------- ----------------------------------
// Имя функции: db_insert($C_sql,A_bind)
// Функция: вставить
// Параметр: оператор sql C_sql
// привязка A_bind
//Возвращаемое значение: логическое значение
// Примечание. Эта функция предназначена только для интуитивного использования, по существу вызывая db_change()
//------------------------------------------------ ------------------------------------------
функция db_insert($C_sql,$A_bind="")
{
вернуть $this -> db_change($C_sql,$A_bind);
}
//------------------------------------------------ -----------------------------------------
//------ -------------------------------------------------- ----------------------------------
// Имя функции: db_update($C_sql,A_bind)
// Функция: обновление
// Параметр: оператор sql C_sql
// привязка A_bind
//Возвращаемое значение: логическое значение
// Примечание. Эта функция предназначена только для интуитивного использования, по существу вызывая db_change()
//------------------------------------------------ ------------------------------------------
функция db_update($C_sql,$A_bind="")
{
вернуть $this -> db_change($C_sql,$A_bind);
}
//------------------------------------------------ -----------------------------------------
//------ -------------------------------------------------- ----------------------------------
// Имя функции: db_commit()
// Функция: представление транзакции
// Параметры: нет
//Возвращаемое значение: логическое значение
// Примечания: Нет
//------------------------------------------------ ------------------------------------------
функция db_commit()
{
return (OCICommit($this->I_linkID));
}
//------------------------------------------------ -----------------------------------------
//------ -------------------------------------------------- ----------------------------------
// Имя функции: db_rollback()
// Функция: откат транзакции
// Параметры: нет
//Возвращаемое значение: логическое значение
// Примечания: Нет
//------------------------------------------------ ------------------------------------------
функция db_rollback()
{
return (OCIRollback($this->I_linkID));
}
//------------------------------------------------ ------------------------------------------
//------------------------------------------------ ------------------------------------------
// Имя функции: db_logoff()
// Функция: отключить соединение с базой данных
// Параметры: нет
//Возвращаемое значение: логическое значение
// Примечания: Нет
//------------------------------------------------ ------------------------------------------
функция db_logoff()
{
return (OCILogoff($this->I_linkID));
}
//------------------------------------------------ ------------------------------------------
//------------------------------------------------ ------------------------------------------
}
?>