Этот скрипт представляет собой слой абстракции для многих баз данных.
Он обеспечивает общий интерфейс для доступа к базам данных, таким как: MySQL, MySQL с использованием MySQLi, PostgreSQL, Oracle, Firebird, Microsoft SQL Server и Interbase
Интерфейс предоставляет средства для создания соединения с базой данных, выполнение SQL-запросов, получение результатов запроса в массивы или объекты, удаления таблиц или полей, проверки существования таблицы или поля, и т.д..
Основной класс абстракции также может отображать результаты запроса в объект-контейнере.
Лицензия: бесплатно для некоммерческого использования.
Системные требования скрипта:
PHP не младше 5.0 версии, а также требуемая СУБД.
Скачать архивы со скриптом вы можете в конце страницы.
Исходник основного класса:
/**
* @name DB Engine v1.0
* @author Tufan Baris YILDIRIm
* @link http://www.tufyta.com
* @since 25.04.2010 02:02
*
* @todo
* - strong debuge mode
* - suppor (base classes) for all db types.
* - db tools for db managing
* - all off db procedures for DBA's
* - more events.
*/
define('BASE',dirname(__FILE__));
define('ENGINE_BASE',BASE.'/db_engine');
define('TOOLS_BASE',ENGINE_BASE.'/tools');
include ENGINE_BASE.'/interfaces/interface_db.php';
include ENGINE_BASE.'/abstract_classes/abstract_db.php';
class dbEngine implements IDb{
#Events
public $onError;
#Tools
private $grid;
private $db,
$dbType='Mysqli';
/**
* Engine Constructor
*
* @param mixed $dbType Db Type. Mysql,Oracle,Mssql,PostgreSQL,Firebird (Interbase)
* @return dbEngine
*/
function __construct($dbType='Mysqli'){
if (is_file($baseFile=ENGINE_BASE.'/base_classes/'.($nDbType='db'.ucfirst(strtolower($this->dbType=$dbType))).'.php'))
include_once $baseFile;
else
$this->error('Base Class File Not Found For <b>'.$dbType.'</b> : '.$baseFile);
if(class_exists($nDbType))
$this->db=new $nDbType;
else
$this->error('Class Not Found : '.$dbType);
$this->checkDb();
return;
$this->db=new ADb; // IDE Hack.
}
/**
* Connect to Data
*
* @param mixed $dbHost IP or Hostname for DB Server
* @param mixed $dbUser DB Username
* @param mixed $dbPass DB User Password
* @param mixed $dbName Use DB Name
*/
function connect($dbHost,$dbUser,$dbPass,$dbName=false){
$this->db->connect($dbHost,$dbUser,$dbPass,$dbName);
}
/**
* Send a Query to db server.
* @param mixed $sql
* @return Datasource type of your server or bool (Truee on success)
*/
public function query($sql){
return $this->db->query($sql);
}
/**
* Simple Select Query
*
* @param mixed $table Table Name
* @param mixed $columns Select Columns if need defaule='*'
* @param mixed $where Condition if need
* @return Datasource
*/
public function select($table,$columns='*',$where=false){
return $this->query('SELECT '
.(is_array($columns) ? implode(',',$columns):$columns)
.' FROM '
.$table
.($where ? ' WHERE '.$where:';')
);
}
/**
* Simple Count Selector
*
* @param mixed $table Table Name
* @param mixed $where Contition if need
* @param mixed $column Not null Coılumn name
* @return mixed
*/
public function count($table,$where=false,$column='*'){
$q=$this->select($table,'COUNT('.$column.')',$where);
$q=$this->fetch_row($q);
return (int)$q[0];
}
/**
* Fetch current row from a datasource with column name
* @param mixed $query Datasource
* @return array DataRow
*/
public function fetch_assoc($query=false){
return $this->db->fetch_assoc($query);
}
/**
* Fetch current row from a datasource with column index
*
* @param mixed $query Datasource
* @return array Datarow
*/
public function fetch_row($query=false){
return $this->db->fetch_row($query);
}
/**
* Create A Grid from a multi dimmension array.
* ->grid($db->fetch_all())->build();
*
* @param mixed $Array
* @return d3Grid
*/
public function grid($Array=false){
if (!is_a($this->grid,'D3Grid')) {
if(!is_array($Array))
$Array=$this->fetch_all();
if(is_Array($Array)){
include_once TOOLS_BASE.'/d3grid.php';
$this->grid=new d3Grid($Array);
}
else
$this->error('this is not an array for generate a grid');
}
else
return $a=&$this->grid;
return new d3Grid(array()); # IDE Hack
}
/**
* Fetch all rows to an array
*
* @param mixed $query
* @return array
*/
public function fetch_all($query=false){
return $this->db->fetch_all($query);
}
/**
* RowCount of Datasource
*
* @param mixed $query
* @return int
*/
public function num_rows($query=false){
return $this->db->num_rows($query);
}
/**
* Close Connection
*/
public function close(){
$this->db->close();
}
/**
* Check DB is extended from Abstract DB Engine
*
*/
private function checkDb(){
if (!is_a($this->db,'ADb')){
$this->error('Object Type Error :'.$this->dbType.' is not a Adb.. it must be extended from, Adb or a class of extends from Adb but it\'s '.gettype($this->db));
}
return true;
}
/**
* Free a query
*
* @param mixed $query
*/
public function free($query=false){
$this->db->free($query);
}
/**
* Simple Table Dropper
*
* @param mixed $tableName
*/
public function drop_table($tableName){
$this->db->drop_table($tableName);
}
/**
* Simple Field Dropper
*
* @param mixed $tableName
* @param mixed $fieldNames
*/
public function drop_fields($tableName,$fieldNames){
$this->db->drop_fields($tableName,$fieldNames);
}
/**
* Change DB
*
* @param mixed $dbName
*/
public function select_db($dbName){
$this->db->select_db($dbName);
}
/**
* Fetch a row from Datasource
*
* @param mixed $query
* @return DataObject
*/
public function fetch_object($query=false){
return $this->db->fetch_object($query);
}
/**
* Check Field Existing
*
* @param mixed $tableName Table Name
* @param mixed $fieldName Field Name
* @return boolean
*/
public function field_exists($tableName,$fieldName){
return $this->db->field_exists($tableName,$fieldName);
}
/**
* Check Field Existing
*
* @param mixed $tableName
* @return boolean
*/
public function table_exists($tableName){
return $this->db->table_exists($tableName);
}
/**
* Trigger an error.
*
* @param mixed $msg Message to be displayed
* @param mixed $dump an object you want dump to screen
*/
protected function error($msg,$dump='xxx'){
if($this->onError){
$this->RunEvent($this->onError,debug_backtrace());
}else {
die('<div><b>Error</b> : '.$msg.'</div>');
}
}
/**
* Event Runner
* @param mixed $EventName Func Name
* @param mixed $Param Func Param
* @return mixed Func Result which called
*/
private function RunEvent($eventName,$Param=False){
if(function_exists($eventName)){
if($Param){
return call_user_func($eventName,$Param);
}else {
return call_user_func($eventName);
}
}
}
}
Скачать архивы
Скачать zip-архив со скриптом.
Скачать tar.gz-архив со скриптом.