<?
//[Warnung]: Bitte nicht ohne Erlaubnis ändern
//------------------------------------------------ ------------------------------------------
//------------------------------------------------ ------------------------------------------
//
// [Dateiname]: c_ora_db.inc
// [Funktion]: Öffentliche Oracle-Funktionsklasse
// [Autor]: Tian Hui
//
// [Datum der letzten Änderung]: 11.05.2001[cxx]
// [Variablendefinitionsregeln]: 'C_'=Zeichentyp,'I_'=Ganzzahltyp,'N_'=Zahlentyp,'L_'=Boolescher Typ,'A_'=Array-Typ
//------------------------------------------------ ------------------------------------------
//------------------------------------------------ ------------------------------------------
// ※db_logon() öffnet die Datenbankverbindung
// ※db_query() allgemeine Auswahl
// ※db_change() Universelle Funktion für Datenbankänderungen (Einfügen, Löschen, Aktualisieren)
// ※db_insert() einfügen, db_change() direkt aufrufen
// ※db_delete() löschen, db_change() direkt aufrufen
// ※db_update() aktualisieren, db_change() direkt aufrufen
// ※db_commit() Transaktionseinreichung
// ※db_rollback() Transaktions-Rollback
// ※db_logoff() trennt die Datenbankverbindung
//------------------------------------------------ ------------------------------------------
Klasse c_ora_db
{
//------------------------------------------------ ------------------------------------------
// Variablendefinition
//------------------------------------------------ ------------------------------------------
var $C_user = ""; //Datenbankbenutzername
var $C_passwd = ""; //Datenbankpasswort
var $C_db = ""; //Datenbankname
var $I_linkID = 0; //Verbindungshandle
var $I_stmtID = 0; //Abfragehandle
var $color = ""; //globale Farbe
//------------------------------------------------ ------------------------------------------
//------------------------------------------------ ------------------------------------------
// Funktionsname: db_logon()
// Funktion: Datenbankverbindung öffnen
// Parameter: keine
//Rückgabewert: Verbindungshandle (Ganzzahl)
// Bemerkungen: Keine
//------------------------------------------------ ------------------------------------------
Funktion db_logon()
{
$this->I_linkID = @OCILogon($this->C_user,$this->C_passwd,$this->C_db);
if ($this->I_linkID == 0){AlertExit('Datenbankverknüpfung fehlgeschlagen, bitte wenden Sie sich an den DBA!');}
return $this->I_linkID;
}
//------------------------------------------------ ------------------------------------------
//------------------------------------------------ ------------------------------------------
// Funktionsname: db_query($C_sql,$A_define="",$I_start=-1,$I_end=-1)
// Funktion: auswählen
// Parameter: $C_sql SQL-Anweisung
// $A_define Felder, die gebunden werden sollen. Array-Typ
// $I_start beginnt mit dem Abrufen von Datensätzen – 1 ruft alle Datensätze der Abfrage ab
// $I_end beendet das Abrufen von Datensätzen
//Rückgabewert: zweidimensionales Array ($A_rs)
// Anmerkungen: Auf den Wert des entsprechenden Felds kann über die Zahlen 0,1,2 ... zugegriffen werden, oder auf den Wert des entsprechenden Felds kann auch durch Abfrage des Feldnamens zugegriffen werden
// Auf das NAME-Feld des ersten Datensatzes kann beispielsweise über $A_rs[0][0] oder $A_rs[0]['NAME'] oder $A_rs[0]['name'] zugegriffen werden.
// $I_start, $I_end sind Parameter, die beim Paging verwendet werden.
//------------------------------------------------ ------------------------------------------
Funktion db_query($C_sql,$A_define="",$I_start=-1,$I_end=-1)
{
if (!$C_sql){AlertExit("Unvollständige Parameter!");}//Parameter prüfen
//Verbindungserkennung
if ($this->I_linkID == 0){AlertExit('Datenbankverknüpfung fehlgeschlagen, bitte wenden Sie sich an den DBA!');}
//Formaterkennung
$this -> I_stmtID = OCIParse($this -> I_linkID,$C_sql);
if (!$this -> I_stmtID){AlertExit('SQL-Formatfehler! Bitte wenden Sie sich an den Programmierer');}
//Wenn das gebundene Feld nicht angegeben ist, holen Sie es aus der SQL-Anweisung ab
if($A_define=="")
{
$A_Cur = explosion("select",$C_sql);
$A_Cur = explosion("from",$A_Cur[1]);
$A_define = explosion(",",$A_Cur[0]);
}
//Datenbanktabellenfelder binden
if(gettype($A_define) == "array") //Die Abfragespalte ist ein Array
{
for($i=0;$i<count($A_define);$i++)
{
$A_define_up[$i] = trim(strtoupper($A_define[$i])); //Leerzeichen großschreiben und entfernen
}
for($i=0;$i<count($A_define_up);$i++)
{
OCIDefineByName($this -> I_stmtID,"$A_define_up[$i]",&$$A_define[$i]);
}
}
elseif(trim($A_define) <> "") //Es gibt nur eine Abfragespalte
{
$A_define_up = trim(strtoupper($A_define));
OCIDefineByName($this -> I_stmtID,"$A_define_up",&$$A_define);
}
//Führen Sie die gebundene SQL-Anweisung aus
if(!OCIExecute($this -> I_stmtID))
{
echo "<font color=red><b>Ausführungsfehler:</b></font>SQL-Fehler:<font color=red>$C_sql</font><br>";
return false;
}
$lower = 0; //Gibt die tiefgestellte Steuervariable der ersten Dimension des zweidimensionalen Arrays zurück
$cnt = 0; //Abruf der Kennung starten
//Datensätze abrufen
while (OCIFetchInto($this -> I_stmtID,&$cur,OCI_ASSOC))
{
//Alle abgefragten Datensätze abrufen
if ($I_start == -1)
{
if (gettype($A_define) == "array") //Die Abfragespalte ist ein 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] //Zugriff mit Zahlen
$A_rs[$lower][$A_define[$i]] = $$A_define[$i] //Kleineren Zugriff verwenden
$A_rs[$lower][$A_define_up[$i]] = $$A_define[$i] //Zugriff in Großbuchstaben
}
}
elseif (trim($A_define) <> "") //Es gibt nur eine Abfragespalte
{
if ($cur[$A_define_up] <> $$A_define)
{
$$A_define = $cur[$A_define_up];
}
$A_rs[$lower][0] = $$A_define; //Zugriff mit Zahlen
$A_rs[$lower][$A_define] = $$A_define; //Zugriff in Kleinbuchstaben
$A_rs[$lower][$A_define_up] = $$A_define; //Größeren Zugriff verwenden
}
$lower++; //Index plus eins
}
//Angegebene Datensätze abrufen (verwendet mit Paging)
if ($I_start <> -1)
{
if ($cnt >= $I_start)
{
$cnt++;
if ($I_end - $I_start <> 0)
{
$I_end--;
if (gettype($A_define) == "array")
{
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] //Zugriff mit Zahlen
$A_rs[$lower][$A_define[$i]] = $$A_define[$i] //Kleineren Zugriff verwenden
$A_rs[$lower][$A_define_up[$i]] = $$A_define[$i] //Zugriff in Großbuchstaben
}
}elseif(trim($A_define) <> "")
{
if ($cur[$A_define_up] <> $$A_define)
{
$$A_define = $cur[$A_define_up];
}
$A_rs[$lower][0] = $$A_define; //Zugriff mit Zahlen
$A_rs[$lower][$A_define] = $$A_define; //Kleineren Zugriff verwenden
$A_rs[$lower][$A_define_up] = $$A_define; //Zugriff in Großbuchstaben
}
$lower++;
}anders
{
break; //Wenn $I_end-$I_start=0, bedeutet das, den Datensatz abzurufen und aus der while-Schleife zu springen
}
}anders
{
$cnt++; //Wenn $cnt<$I_start,$cnt++
}
}
} //Ende der Weile
//Handle freigeben und die Abfragedaten zurückgeben (ein zweidimensionales Array)
OCIFreestatement($this -> I_stmtID);
return $A_rs;
} //Ende der Funktion
//------------------------------------------------ ------------------------------------------
//------ -------------------------------------------------- ----------------------------------
// Funktionsname: db_change($C_sql,$A_bind)
// Funktion: DB-Änderung
// Parameter: $C_sql SQL-Anweisung
// $A_bind Felder, die gebunden werden sollen. Array-Typ
//Rückgabewert: Boolescher Wert
// Hinweis: Einfügen, Löschen und Aktualisieren sind üblich
//------------------------------------------------ ------------------------------------------
Funktion db_change($C_sql,$A_bind="")
{
if (!$C_sql){AlertExit("Unvollständige Parameter!");}//Parameter prüfen
//Verbindungserkennung
if($this -> I_linkID==""){ AlertExit("Unsere Datenbank ist ausgelastet, bitte verbinden Sie sich später erneut!");}
//Formaterkennung
$this -> I_stmtID = OCIParse($this -> I_linkID,$C_sql);
if (!$this -> I_stmtID){AlertExit('SQL-Formatfehler! Bitte wenden Sie sich an den Programmierer');}
//Binden
if(gettype($A_bind) == "array")
{
for($i=0;$i<count($A_bind);$i++)
{
global $$A_bind[$i];
$$A_bind[$i] = StripSlashes($$A_bind[$i]); //Backslash-Zeichen entfernen
$$A_bind[$i] = str_replace("<?","< ?",$$A_bind[$i]); //PHP-Tags herausfiltern
}
for($i=0;$i<count($A_bind);$i++){
OCIBindByName($this -> I_stmtID, ":$A_bind[$i]", &$$A_bind[$i], -1);
}
}
elseif(trim($A_bind) <> "") //Kein Array, sondern ein Zeichen
{
global $$A_bind;
$$A_bind = StripSlashes($$A_bind);
$$A_bind = str_replace("<?","< ?",$$A_bind); //PHP-Tags herausfiltern
OCIBindByName($this -> I_stmtID, ":$arrBind", &$$A_bind, -1);
}
//Ausführen und prüfen, ob es erfolgreich ist
if(!OCIExecute($this -> I_stmtID,OCI_DEFAULT))
{
echo "<font color=red><b>Ausführungsfehler:</b></font>SQL-Fehler:<font color=red>$C_sql</font><br>";
return false;
}
/*//Gibt die Anzahl der betroffenen Zeilen zurück
global $I_changenum;
$I_changenum = OCINumrows($this -> I_stmtID);*/
//Handle freigeben und Wert zurückgeben
OCIFreeStatement($this -> I_stmtID);
return true;
}
//------------------------------------------------ ------------------------------------------
//------ -------------------------------------------------- ----------------------------------
// Funktionsname: db_delete($C_sql)
// Funktion: löschen
// Parameter: C_sql SQL-Anweisung
//Rückgabewert: Boolescher Wert
// Hinweis: Diese Funktion dient nur der intuitiven Verwendung und ruft im Wesentlichen db_change() auf.
//------------------------------------------------ ------------------------------------------
Funktion db_delete($C_sql)
{
return $this -> db_change($C_sql);
}
//------------------------------------------------ ------------------------------------------
//------ -------------------------------------------------- ----------------------------------
// Funktionsname: db_insert($C_sql,A_bind)
// Funktion: einfügen
// Parameter: C_sql SQL-Anweisung
// A_bind-Bindung
//Rückgabewert: Boolescher Wert
// Hinweis: Diese Funktion dient nur der intuitiven Verwendung und ruft im Wesentlichen db_change() auf.
//------------------------------------------------ ------------------------------------------
Funktion db_insert($C_sql,$A_bind="")
{
return $this -> db_change($C_sql,$A_bind);
}
//------------------------------------------------ ------------------------------------------
//------ -------------------------------------------------- ----------------------------------
// Funktionsname: db_update($C_sql,A_bind)
// Funktion: aktualisieren
// Parameter: C_sql SQL-Anweisung
// A_bind-Bindung
//Rückgabewert: Boolescher Wert
// Hinweis: Diese Funktion dient nur der intuitiven Verwendung und ruft im Wesentlichen db_change() auf.
//------------------------------------------------ ------------------------------------------
Funktion db_update($C_sql,$A_bind="")
{
return $this -> db_change($C_sql,$A_bind);
}
//------------------------------------------------ ------------------------------------------
//------ -------------------------------------------------- ----------------------------------
// Funktionsname: db_commit()
// Funktion: Transaktionseinreichung
// Parameter: keine
//Rückgabewert: Boolescher Wert
// Bemerkungen: Keine
//------------------------------------------------ ------------------------------------------
Funktion db_commit()
{
return (OCICommit($this->I_linkID));
}
//------------------------------------------------ ------------------------------------------
//------ -------------------------------------------------- ----------------------------------
// Funktionsname: db_rollback()
// Funktion: Transaktions-Rollback
// Parameter: keine
//Rückgabewert: Boolescher Wert
// Bemerkungen: Keine
//------------------------------------------------ ------------------------------------------
Funktion db_rollback()
{
return (OCIRollback($this->I_linkID));
}
//------------------------------------------------ ------------------------------------------
//------------------------------------------------ ------------------------------------------
// Funktionsname: db_logoff()
// Funktion: Datenbankverbindung trennen
// Parameter: keine
//Rückgabewert: Boolescher Wert
// Bemerkungen: Keine
//------------------------------------------------ ------------------------------------------
Funktion db_logoff()
{
return (OCILogoff($this->I_linkID));
}
//------------------------------------------------ ------------------------------------------
//------------------------------------------------ ------------------------------------------
}
?>