Location: PHPKode > scripts > ActiveDBLib > activedblib/activeDBLib.php
<?php
// +----------------------------------------------------------------------+
// | activeDBLib 0.1                                                      |
// +----------------------------------------------------------------------+
// | Date: 16 Feb 2005                                                    |
// +----------------------------------------------------------------------+
// | License: LGPL                                                        |
// +----------------------------------------------------------------------+
// | PHP class to access MySQL (default) or optionally other Databases,   |
// | by using a Database Abstraction Library (ADODB,PEAR::DB or METABASE).|
// | It's primary intention is to hide the differences                    |
// | between the different Database Abstraction Libraries                 |
// | and to provide standard methods for the                              |
// | database connection, query and result operations.                    |
// +----------------------------------------------------------------------+
// | Author: Giorgos Tsiledakis <gt [at] corissia [dot] com>              |
// +----------------------------------------------------------------------+
class activeDBLib{
//==============================================================================================
// PUBLIC (Constructor) -> checks the included libraries (if any)
// param $driver: sets the database type; default: mysql
//==============================================================================================
function activeDBLib($driver="mysql"){
$this->driver=$driver;
	if (class_exists("ADOConnection")){
		$this->actDBLib="ADODB";
		$this->extDBLib=&ADONewConnection($driver);
	}
	elseif (class_exists("DB")) $this->actDBLib="PEARDB";
	elseif (function_exists("MetabaseSetupDatabase")) $this->actDBLib="METABASE";
}
//==============================================================================================
// PUBLIC debug() -> if there is an error, it prints the error message and exits
//==============================================================================================
function debug($bool=true){
$this->debug=$bool;
}
//==============================================================================================
// PUBLIC error() -> returns false, if there is no error or the error message, if there is an error
//==============================================================================================
function error(){
return $this->error;
}
//==============================================================================================
// PUBLIC connect() -> opens a connection to a database server
//==============================================================================================
function connect($host=false,$user=false,$pass=false,$dbase=false,$opt=false){
	if ($this->actDBLib=="ADODB"){
		@$this->conn=$this->extDBLib->Connect($host,$user,$pass,$dbase);
		if (!$this->conn) $this->activeDBLib_error($this->extDBLib->ErrorMsg());
	}
	elseif ($this->actDBLib=="PEARDB"){
		$dns=array("phptype"=>$this->driver,"hostspec"=>$host,"username"=>$user,"password"=>$pass,"database"=>$dbase);
		$this->conn=&DB::connect($dns,$opt);
		if (DB::isError($this->conn)) $this->activeDBLib_error($this->conn->getMessage());
	}
	elseif ($this->actDBLib=="METABASE"){
		$dns=array("Type"=>$this->driver,"Host"=>$host,"User"=>$user,"Password"=>$pass,"Database"=>$dbase,"Persistent"=>0,"Options"=>$opt);
		$error=MetabaseSetupDatabase($dns,$this->conn);
		if ($error!="") $this->activeDBLib_error($error);
	}
	elseif ($this->actDBLib==false){
		$this->driver="mysql";
		$this->conn=@mysql_connect($host,$user,$pass);
		@mysql_select_db($dbase,$this->conn);
			if (!$this->conn) $this->activeDBLib_error();
	}
}
//==============================================================================================
// PUBLIC pconnect() -> opens a persistent connection to a database server
//==============================================================================================
function pconnect($host=false,$user=false,$pass=false,$dbase=false,$opt=false){
	if ($this->actDBLib=="ADODB"){
		@$this->conn=$this->extDBLib->PConnect($host,$user,$pass,$dbase);
		if (!$this->conn) $this->activeDBLib_error($this->extDBLib->ErrorMsg());
	}
	elseif ($this->actDBLib=="PEARDB"){
		$dns=array("phptype"=>$this->driver,"hostspec"=>$host,"username"=>$user,"password"=>$pass,"database"=>$dbase);
		$this->conn=&DB::connect($dns,$opt);
		$this->conn->setOption('persistent', true);
		if (DB::isError($this->conn)) $this->activeDBLib_error($this->conn->getMessage());
	}
	elseif ($this->actDBLib=="METABASE"){
		$dns=array("Type"=>$this->driver,"Host"=>$host,"User"=>$user,"Password"=>$pass,"Database"=>$dbase,"Persistent"=>1,"Options"=>$opt);
		$error=MetabaseSetupDatabase($dns,$this->conn);
		if ($error!="") $this->activeDBLib_error($error);
	}
	elseif ($this->actDBLib==false){
		$this->driver="mysql";
		$this->conn=@mysql_pconnect($host,$user,$pass);
		@mysql_select_db($dbase,$this->conn);
			if (!$this->conn) $this->activeDBLib_error();
	}
}
//==============================================================================================
// PUBLIC execute() -> sends a SQL query to Database
// param $sql: SQL string
//==============================================================================================
function execute($sql=false){
	if ($this->conn){
		if ($this->actDBLib=="ADODB"){
			@$this->sqlRs=$this->extDBLib->Execute($sql);
			if (!$this->sqlRs) $this->activeDBLib_error($this->extDBLib->ErrorMsg());
			else return $this->sqlRs;
		}
		elseif ($this->actDBLib=="PEARDB"){
			@$this->sqlRs=&$this->conn->query($sql);
			if (DB::isError($this->sqlRs)) $this->activeDBLib_error($this->sqlRs->getUserInfo());
			else return $this->sqlRs;
		}
		elseif ($this->actDBLib=="METABASE"){
			$this->sqlRs=MetabaseQuery($this->conn,$sql);
			$this->rowInit=0;
			if ($this->sqlRs==0) $this->activeDBLib_error(MetabaseError($this->conn));
			else return $this->sqlRs;
		}
		elseif ($this->actDBLib==false){
			if ($this->sqlRs) @mysql_free_result($this->sqlRs);
		$this->sqlRs=@mysql_query($sql,$this->conn);
			if (!$this->sqlRs) $this->activeDBLib_error();
			else return $this->sqlRs;
		}
	}
	else return false;
}
//==============================================================================================
// PUBLIC rowCount() -> gets the number of rows in previous operation
//==============================================================================================
function rowCount(){
	if ($this->sqlRs){
		if ($this->actDBLib=="ADODB") return $this->sqlRs->RowCount();
		elseif ($this->actDBLib=="PEARDB") return @$this->sqlRs->numRows();
		elseif ($this->actDBLib=="METABASE") return MetabaseNumberOfRows($this->conn,$this->sqlRs);
		elseif ($this->actDBLib==false) return @mysql_num_rows($this->sqlRs);
	}
	else return false;
}
//==============================================================================================
// PUBLIC fieldCount() -> gets the number of columns in previous operation
//==============================================================================================
function fieldCount(){
	if ($this->sqlRs){
		if ($this->actDBLib=="ADODB") return $this->sqlRs->FieldCount();
		elseif ($this->actDBLib=="PEARDB") return @$this->sqlRs->numCols();
		elseif ($this->actDBLib=="METABASE") return MetabaseNumberOfColumns($this->conn,$this->sqlRs);
		elseif ($this->actDBLib==false) return @mysql_num_fields($this->sqlRs);
	}
	else return false;
}
//==============================================================================================
// PUBLIC getArray() -> fetches a result row as an array
//==============================================================================================
function getArray(){
$data=false;
	if ($this->sqlRs){
		if ($this->actDBLib=="ADODB") $data=$this->sqlRs->FetchRow();
		elseif ($this->actDBLib=="PEARDB") $data=&$this->sqlRs->fetchRow();
		elseif ($this->actDBLib=="METABASE"){
			if ($this->rowInit<$this->rowCount()){
				@MetabaseFetchResultArray($this->conn,$this->sqlRs,&$data,$this->rowInit);
				$this->rowInit++;
			}
		}
		elseif ($this->actDBLib==false) $data=@mysql_fetch_array($this->sqlRs, MYSQL_BOTH);
	}
return $data;
}
//==============================================================================================
// PUBLIC affectedRows() ->  gets number of affected rows in previous operation
//==============================================================================================
function affectedRows(){
	if ($this->sqlRs){
		if ($this->actDBLib=="ADODB") return $this->extDBLib->Affected_Rows();
		elseif ($this->actDBLib=="PEARDB") return $this->conn->affectedRows();
		elseif ($this->actDBLib=="METABASE") return MetabaseAffectedRows($this->conn, &$affected_rows);
		elseif ($this->actDBLib==false) return mysql_affected_rows();
	}
	else return false;
}
//==============================================================================================
// PUBLIC getField() -> gets information of the specified field in a result
// param $column: number of the field
// param $mode:
// name -> gets the name of the field;
// type -> gets the type of the field; (not implemented for Metabase yet)
// max_Length -> gets the maximal length of the field; (not implemented for Metabase yet)
//==============================================================================================
function getField($column=0,$mode="name"){
	if ($this->sqlRs){
		if ($this->actDBLib=="ADODB"){
			$fld=$this->sqlRs->FetchField($column);
			switch($mode){
				case "name": return $fld->name;
				case "type": return $fld->type;
				case "max_length": return $fld->max_length;
			}
		}
		elseif ($this->actDBLib=="PEARDB"){
			$fld=$this->sqlRs->tableInfo($this->sqlRs,0);
			switch($mode){
				case "name": return $fld[$column]['name'];
				case "type": return $fld[$column]['type'];
				case "max_length": return $fld[$column]['len'];
			}
		}
		elseif ($this->actDBLib=="METABASE"){
			switch($mode){
			case "name": MetabaseGetColumnNames($this->conn,$this->sqlRs,$fld);
				foreach ($fld as $name => $col){
					if ($col==$column) return $name;
				}
			// other cases not implemented yet
			}
		}
		elseif ($this->actDBLib==false){
			switch($mode){
				case "name": return @mysql_field_name($this->sqlRs,$column);
				case "type": return @mysql_field_type($this->sqlRs,$column);
				case "max_length": return @mysql_field_len($this->sqlRs,$column);
			}
		}
	}
	else return false;
}
//==============================================================================================
// PUBLIC disconnect() ->  closes the connection
//==============================================================================================
function disconnect(){
	if ($this->conn){
		if ($this->actDBLib=="ADODB"){
			if ($this->sqlRs) $this->sqlRs->Close();
			$this->conn->Close();
		}
		elseif ($this->actDBLib=="PEARDB") $this->conn->disconnect();
		elseif ($this->actDBLib=="METABASE") MetabaseCloseSetup($this->conn);
		elseif ($this->actDBLib==false) mysql_close($this->conn);
	}
	else return false;
}
//==============================================================================================
// PUBLIC getExtLibrary() ->  returns the name of loaded Database Abstraction Library (if any)
//==============================================================================================
function getDBLibrary(){
	if ($this->actDBLib==false) $lib="activeDBLib";
	else $lib=$this->actDBLib;
return $lib;
}
//==============================================================================================
// PUBLIC getDriver() ->  returns the Database type used (default mysql)
//==============================================================================================
function getDriver(){
return $this->driver;
}
//==============================================================================================
// PUBLIC htmlTable() ->  returns a html table string with the field info and rows of a SELECT (test function)
//==============================================================================================
function htmlTable(){
$out="<table>\n";
$out.="<tr>";
	for ($i=0;$i<$this->fieldCount();$i++) $out.="<th>".$this->getField($i,"name")."</th>";
$out.="</tr>\n";
$out.="<tr>";
	for ($i=0;$i<$this->fieldCount();$i++) $out.="<th>".$this->getField($i,"type")."</th>";
$out.="</tr>\n";
$out.="<tr>";
	for ($i=0;$i<$this->fieldCount();$i++) $out.="<th>".$this->getField($i,"max_length")."</th>";
$out.="</tr>\n";
	while ($rows=$this->GetArray()){
		$out.="<tr>\n";
		for ($x=0;$x<$this->fieldCount();$x++) {
			$out.="<td>".htmlentities($rows[$x])."</td>\n";
		}
		$out.="</tr>\n";
	}
$out.="</table>\n";
return $out;
}
//==============================================================================================
// PRIVATE VARIABLES
//==============================================================================================
var $debug=false; // true: display errors and die
var $error=false; // the error description
var $actDBLib=false; // name of loaded library; possible values: false (none), ADODB, PEARDB, METABASE
var $extDBLib=false; // object of the ADODB Connection
var $conn=false; // the connection ID
var $sqlRs=false; // the SQL query ID
var $rowInit=0; // help var for getArray if metabase
//==============================================================================================
// PRIVATE activeDBLib_error -> (if debug==true) prints the error message and exits the application
//==============================================================================================
function activeDBLib_error($errorDes=""){
	if ($errorDes==""){
		if (mysql_errno()) $errorDes="MySQL said: Error #" .mysql_errno()." : ". mysql_error();
	}
$this->error=$errorDes;
	if ($this->debug) die($errorDes);
}
}
?>
Return current item: ActiveDBLib