<?php
 
/******************************************************************************
 
define path to classes dir
 
/******************************************************************************/
 
define('DB_CLASSES', 'classes/');
 
/******************************************************************************
 
autoloader DB classes
 
/******************************************************************************/
 
spl_autoload_register(
 
    function($class){
 
        $filename = DB_CLASSES . $class . '.class.php';
 
        if(is_readable($filename)){
 
            include_once($filename);
 
        }
 
    },
 
true);
 
/******************************************************************************
 
DB factory-function
 
/******************************************************************************/
 
function db($input = false){
 
    static $instance;
 
    if($instance !== null and $input === false){
 
        return($instance);
 
    }
 
    else{
 
        // select config
 
        if(is_array($input)){
 
            var_dump('ARRAY');
 
        }
 
        elseif(is_string($input)){
 
            if(($config = json_decode($input, true)) !== null){
 
                var_dump('JSON');
 
            }
 
            elseif(is_readable($input)){
 
                var_dump('FILE');
 
                $config = json_decode(file_get_contents($input), true);
 
                if($config === null){
 
                    throw new db_Exeption('DB: Error config file "' . $input . '"!', 1);
 
                }
 
            }
 
            else{
 
                throw new db_Exeption('DB: Error input string!', 1);
 
            }
 
        }
 
        else{
 
            var_dump('CLASS');
 
            try{
 
                $config = json_decode(json_encode(new db_config()), true);
 
            }
 
            catch(Exception $e){
 
                throw new db_Exeption('DB: Error configuration!', 1);
 
            }
 
        }
 
        // checking config
 
        if(!isset($config['class'])){
 
            throw new db_Exeption('DB: Classname isn\'t set!', 1);
 
        }
 
        $config['host'] = isset($config['host']) ? $config['host'] : false;
 
        $config['port'] = isset($config['port']) ? $config['port'] : false;
 
        $config['sock'] = isset($config['sock']) ? $config['sock'] : false;
 
        $config['user'] = isset($config['user']) ? $config['user'] : false;
 
        $config['pass'] = isset($config['pass']) ? $config['pass'] : false;
 
        $config['base'] = isset($config['base']) ? $config['base'] : false;
 
        $config['coll'] = isset($config['coll']) ? $config['coll'] : false;
 
        // load class
 
        try{
 
            $class = 'db_' . $config['class'];
 
            $instance = new $class($config);
 
            return($instance);
 
        }
 
        catch(Exception $e){
 
            throw new db_Exeption('DB: Unknown class "' . $config['class'] . '"!', 1);
 
        }
 
    }
 
}
 
/******************************************************************************
 
Exceptions
 
/******************************************************************************/
 
class db_Exeption extends Exception{
 
 
}
 
/******************************************************************************
 
abstract class DB
 
/******************************************************************************/
 
abstract class db{
 
    // descriptor database connection
 
    protected $link = false;
 
    // number of fields in result from last query
 
    protected $fields = 0;
 
    // number of rows in result from last query
 
    protected $rows = 0;
 
    // counter queries
 
    protected $counter = 0;
 
    // timer queries
 
    protected $timer = 0;
 
/******************************************************************************/
 
    // connect
 
    abstract public function __construct($config);
 
/******************************************************************************/
 
    // disconnect
 
    abstract public function __destruct(); 
 
/******************************************************************************/
 
    //    request to DB
 
    abstract public function q($query);
 
/******************************************************************************/
 
    // safe input data
 
    abstract public function s($data);
 
/******************************************************************************/
 
    // choice of encoding
 
    abstract public function c($collate);
 
/******************************************************************************/
 
    // return last insert id
 
    abstract public function l();
 
/******************************************************************************/
 
    // status connection
 
    public function o(){
 
        return(!!$this->link);
 
    }
 
/******************************************************************************/
 
    // return number of fields in result from last query (SELECT)
 
    public function f(){
 
        return($this->fields);
 
    }
 
/******************************************************************************/
 
    // return number of rows in result from last query (SELECT) or affected records (INSERT, UPDATE, DELETE)
 
    public function r(){
 
        return($this->rows);
 
    }
 
/******************************************************************************/
 
    // return counter
 
    public function i(){
 
        return($this->counter);
 
    }
 
/******************************************************************************/
 
    // return timer
 
    public function t(){
 
        return($this->timer);
 
    }
 
}
 
/******************************************************************************/
 
 
 |