Единый PHP интерфейс для доступа к базам данных
Вход Регистрация

Единый PHP интерфейс для доступа к базам данных

Этот скрипт представляет собой слой абстракции для многих баз данных.

Он обеспечивает общий интерфейс для доступа к базам данных, таким как: 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);
                  }
            }
      }


   }

Скачать архивы


Комментировать

captcha

Вход

Зарегистрируйтесь, если нет учетной записи

Напомнить пароль
Регистрация
Напомнить пароль
Войти в личный кабинет