<?
//[警告]: 許可なく改変しないでください
//------------------------------------------------ ------------------------------------------
//------------------------------------------------ ------------------------------------------
//
// [ファイル名]: c_ora_db.inc
// [関数]: Oracle パブリック関数クラス
// [著者]: Tian Hui
//
// [最終更新日]: 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('データベース リンクに失敗しました。DBA に連絡してください!');}
$this->I_linkID を返します。
}
//------------------------------------------------ ------------------------------------------
//------------------------------------------------ ------------------------------------------
// 関数名: db_query($C_sql,$A_define="",$I_start=-1,$I_end=-1)
// 関数: 選択
// パラメータ: $C_sql SQL ステートメント
// $A_define フィールドをバインドします。配列型
// $I_start はレコードのフェッチを開始します - 1 はクエリのすべてのレコードをフェッチします
// $I_end はレコードの取得を終了します
//戻り値:2次元配列($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('データベース リンクに失敗しました。DBA に連絡してください!');}
//フォーマット検出
$this -> I_stmtID = OCIParse($this -> I_linkID,$C_sql);
if (!$this -> I_stmtID){AlertExit('SQL 形式エラー! プログラマに連絡してください');}
//バインドされたフィールドが指定されていない場合は、SQL ステートメントから取得します
if($A_define=="")
{
$A_Cur =explode("select",$C_sql);
$A_Cur =explode("から",$A_Cur[1]);
$A_define =explode(",",$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) <> "") //クエリ列は 1 つだけです
{
$A_define_up = トリム(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>";
false を返します。
}
$ lower = 0; // 2次元配列の1次元目の添字制御変数を返します。
$cnt = 0; //識別子の取得を開始
//レコードを取得する
while (OCIFetchInto($this -> I_stmtID,&$cur,OCI_ASSOC))
{
// クエリされたすべてのレコードを取得します
if ($I_start == -1)
{
if (gettype($A_define) == "array") //クエリ列は配列です
{
for ($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) <> "") //クエリ列は 1 つだけです
{
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++; // 添え字プラス 1
}
//指定されたレコードを取得します (ページングで使用)
if ($I_start <> -1)
{
if ($cnt >= $I_start)
{
$cnt++;
if ($I_end - $I_start <> 0)
{
$I_end--;
if (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; // 大文字でアクセスします。
}
$下++;
}それ以外
{
Break; // $I_end-$I_start=0 の場合、レコードをフェッチし、while ループから抜け出すことを意味します。
}
}それ以外
{
$cnt++; //$cnt<$I_startの場合、$cnt++
}
}
} //終わり
//ハンドルを解放し、クエリデータ(2次元配列)を返す
OCIFreestatement($this -> I_stmtID);
$A_rs を返します。
} //関数の終了
//------------------------------------------------ ------------------------------------------
//------ -------------------------------------------------- ----------------------------------
// 関数名: db_change($C_sql,$A_bind)
// 関数: データベース変更
// パラメータ: $C_sql 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_バインド;
$$A_bind = ストリップスラッシュ($$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>";
false を返します。
}
/*//影響を受ける行の数を返す
グローバル $I_changenum;
$I_changenum = OCINumrows($this -> I_stmtID);*/
//ハンドルを解放して値を返す
OCIFreeStatement($this -> I_stmtID);
true を返します。
}
//------------------------------------------------ ------------------------------------------
//------ -------------------------------------------------- ----------------------------------
// 関数名: db_delete($C_sql)
// 関数: 削除
// パラメータ: C_sql SQL ステートメント
//戻り値: ブール値
// 注: この関数は直感的に使用するためのものであり、基本的に db_change() を呼び出します。
//------------------------------------------------ ------------------------------------------
関数 db_delete($C_sql)
{
$this を返す -> db_change($C_sql);
}
//------------------------------------------------ ------------------------------------------
//------ -------------------------------------------------- ----------------------------------
// 関数名: db_insert($C_sql,A_bind)
// 関数: 挿入
// パラメータ: C_sql SQL ステートメント
// A_bind バインディング
//戻り値: ブール値
// 注: この関数は直感的に使用するためのものであり、基本的に db_change() を呼び出します。
//------------------------------------------------ ------------------------------------------
関数 db_insert($C_sql,$A_bind="")
{
return $this -> db_change($C_sql,$A_bind);
}
//------------------------------------------------ ------------------------------------------
//------ -------------------------------------------------- ----------------------------------
// 関数名: db_update($C_sql,A_bind)
// 関数: 更新
// パラメータ: C_sql SQL ステートメント
// A_bind バインディング
//戻り値: ブール値
// 注: この関数は直感的に使用するためのものであり、基本的に db_change() を呼び出します。
//------------------------------------------------ ------------------------------------------
関数 db_update($C_sql,$A_bind="")
{
return $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));
}
//------------------------------------------------ ------------------------------------------
//------------------------------------------------ ------------------------------------------
}
?>