<?php
               /* 
               ##    Simple Database Abstraction Layer 1.2 [lib.sdba.php]  
               ##    by Gabe Bauman <gabeb@canada.com> 
               ##    Wednesday, April 05, 2000 
               ##    extended by Michael Howitz <icemac@gmx.net> 
               ##    Thuesday, Jun 15, 2000 
               ##  
               ##    Easy way to read and write to any (!)  database.  
               ##    Only one subclass (CDBMySQL) has been written.  
               ##  
               ##    Changes in 1.1 from 1.0:  
               ##      - added the optional $dbname parameter to the constructor  
               ##         of the base class. If specified, it calls SelectDB for you.  
               ##      - function results now use 1 and 0 rather than true or false.  
               ##      - minor efficiency fixes  
               ##      
               ##    Changes in 1.2 from 1.1: 
               ##      - added support for: Commit, Rollback, SetAutoCommit 
               ##      - added subclass for oracle (OCI8) support 
               ## 
               ##    Usage:  
               ##  
               ##    $sql = new CDB_OCI8 ($DB_HOST, $DB_USER, $DB_PASS); 
               ##    $sql -> Query("SELECT Lastname, Firstname FROM people");  
               ##    while ($sql -> ReadRow()) {  
               ##      print $sql -> RowData["Lastname"] . "," . $sql -> RowData["Firstname"] ."<br>\n";  
               ##    }  
               ##    $sql -> Close();  
               ##  
               ##    If you use this software, please leave this header intact.  
               ##    Please send any modifications/additions to the author for  
               ##    merging into the distribution (like other DB subclasses!)  
               */ 

               class CDBAbstract {  
                 var $_db_linkid = 0;  
                 var $_db_qresult = 0; 
                 var $_auto_commit = false; 
                 var $RowData = array();  
                 var $NextRowNumber = 0;  
                 var $RowCount = 0; 
                 function CDBAbstract () {  
                   die ("CDBAbstract: Do not create instances of CDBAbstract! Use a subclass.");  
                 } 
                 function Open ($host, $user, $pass, $db = "", $autocommit = true) {  
                 } 
                 function Close () { 
                 } 
                 function SelectDB ($dbname) { 
                 } 
                 function Query ($querystr) { 
                 } 
                 function SeekRow ($row = 0) { 
                 } 
                 function ReadRow () { 
                 } 
                 function Commit () { 
                 } 
                 function Rollback () { 
                 } 
                 function SetAutoCommit ($autocommit) { 
                   $this->_auto_commit = $autocommit; 
                 } 
                 function _ident () {  
                   return "CDBAbstract/1.2";  
                 } 
               } 

               class CDBMySQL extends CDBAbstract {  
                 function CDBMySQL ($host, $user, $pass, $db = "") {  
                   $this->Open ($host, $user, $pass);  
                   if ($db != "")   
                     $this->SelectDB($db);  
                 }    
                 function Open ($host, $user, $pass, $autocommit = true) {  
                   $this->_db_linkid = mysql_connect ($host, $user, $pass);  
                 }    
                 function Close () {  
                   @mysql_free_result($this->_db_qresult);  
                   return mysql_close ($this->_db_linkid);  
                 }    
                 function SelectDB ($dbname) {  
                   if (@mysql_select_db ($dbname, $this->_db_linkid) == true) {  
                     return 1;      
                   }   
                   else {  
                     return 0;  
                   }     
                 }     
                 function  Query ($querystr) {
                   $result = mysql_query ($querystr, $this->_db_linkid);  
                   if ($result == 0) {  
                     return 0;  
                   }   
                   else {  
                     if ($this->_db_qresult) 
                   @mysql_free_result($this->_db_qresult);  
                     $this->RowData = array();        
                     $this->_db_qresult = $result;  
                     $this->RowCount = @mysql_num_rows ($this->_db_qresult);  
                     if (!$this->RowCount) {  
                   // The query was probably an INSERT/REPLACE etc.  
                   $this->RowCount = 0;  
                     }   
                     return 1;  
                   }
                 }    
                 function SeekRow ($row = 0) {  
                   if ((!mysql_data_seek ($this->_db_qresult, $row)) or ($row > $this->RowCount-1)) {  
                     printf ("SeekRow: Cannot seek to row %d\n", $row);  
                     return 0;
                   }  
                   else {  
                     return 1;  
                   }  
                 }
				 function Size () {
					return $this->RowCount;
				 }
                 function ReadRow () {
                   if($this->RowData = mysql_fetch_array ($this->_db_qresult)) {  
                     $this->NextRowNumber++;  
                     return 1;  
                   }  
                   else {  
                     return 0;  
                   }  
                 }    
                 function Commit () { 
                   return 1; 
                 } 
                 function Rollback () { 
                   echo "WARNING: Rollback is not supported by MySQL"; 
                 } 
                 function _ident () {  
                   return "CDBMySQL/1.2";  
                 }    
               }  


               class CDB_OCI8 extends CDBAbstract {  
                 function CDB_OCI8($host, $user, $pass, $autocommit = true) { 
                   $this->Open ($host, $user, $pass, "", $autocommit);  
                 } 

                 function Open($host, $user, $pass, $db = "", $autocommit = true) {  
                   ($this->_db_linkid = OCILogon($user, $pass, $host)) or die("Error on logon: ". OCIError()); 
                   $this->_auto_commit = $autocommit; 
                 } 

                 function Close() {  
                   OCIFreeStatement($this->_db_qresult); 
                   OCILogOff($this->_db_linkid) or die ("Error on logoff: ". OCIError()); 
                 } 

                 function SelectDB($dbname) { 
                   echo "CDB_OCI8 does not support SelectDB"; 
                   return 0; 
                 } 

                 function Query($querystr) { 
                   ($result = ociparse($this->_db_linkid, $querystr))  
                     or die("Error in query: ". OCIError()); 
                   if ($this->_auto_commit) { 
                     OCIExecute($result, OCI_COMMIT_ON_SUCCESS); 
                   } 
                   else { 
                     OCIExecute($result, OCI_DEFAULT); 
                   } 
                    
                   if ($result == 0) {  
                     return 0;  
                   }   
                   else { 
                     if ($this->_db_qresult) 
                   OCIFreeStatement($this->_db_qresult); 
                     $this->RowData = array();    
                     $this->_db_qresult = $result; 
                     $this->RowCount = OCIRowCount($this->_db_qresult); 
                     if (!$this->RowCount) { 
                   // The query was probably an INSERT/REPLACE etc.  
                   $this->RowCount = 0;  
                     } 
                     return 1;  
                   } 
                 } 

                 function SeekRow ($row = 0) { 
                   die ("CDB_OCI8 does not support SelectDB"); 
                 } 
                 
                 function ReadRow() {
                   if(OCIFetchInto($this->_db_qresult, $this->RowData, OCI_ASSOC)) {
                     $this->NextRowNumber++;
                     return 1;
                   }
                   else {
                     return 0;
                   }
                 }

                 function Commit() {
                   OCICommit($this->_db_linkid);
                 }

                 function Rollback() {
                   OCIRollback($this->_db_linkid);
                 }

                 function _ident () {
                   return "CDB_OCI8/1.0";
                 }
               }

?>