Файл: classes/_class.db.php
Строк: 131
<?PHP
class db{
    private $con = false; // Идентификатор
    private $Queryes = 0; // Число запросов
    private $MySQLErrors = array(); // Массив с ошибками
    private $TimeQuery = 0; // Всемя запросов
    private $MaxExTime = 0; // Максимальное время за 1 запрос
    private $ListQueryes = ""; // Список запросов
    private $HardQuery = ""; // Самый тяжелый запрос
    private $LastQuery = false; // Ресурс запрос
    private $ConnectData = array(); // Данные соединения
    
    /*======================================================================*
    Function:    __construct
    Descriiption: Выполняется при создании экземпляра класса
    *======================================================================*/
    public function __construct($host, $user, $pass, $base){
        $this->Connect($host, $user, $pass, $base);
        $this->query("SET NAMES 'cp1251'");
        $this->query("SET CHARACTER SET 'cp1251'");
    }
    
    /*======================================================================*
    Function:    Stats
    Descriiption: Возвращает статистику по запросам
    *======================================================================*/
    public function Stats(){
        
        $sD = array();
        $sD["TimeQuery"] = $this->TimeQuery;
        $sD["MaxExTime"] = $this->MaxExTime;
        $sD["ListQueryes"] = $this->ListQueryes;
        $sD["HardQuery"] = $this->HardQuery;
        $sD["Queryes"] = $this->Queryes;
        return $sD;
    }
    /*======================================================================*
    Function:    GetError
    Descriiption: Выводит описание ошибки в поток
    *======================================================================*/
    private function GetError($TextError){
        $this->MySQLErrors[] = $TextError;
        die($TextError);
    }
    
    
    /*======================================================================*
    Function:    query
    Descriiption: Запрос
    *======================================================================*/    
    public function query($query, $FreeMemory = false, $write_last = true){
        
        $TimeA = $this->get_time();
        $xxt_res = mysqli_query($this->con, $query) or $this->GetError(mysqli_error($this->con));
        
        if($write_last) $this->LastQuery = $xxt_res;
        
        $TimeB = $this->get_time() - $TimeA;
        $this->TimeQuery += $TimeB;
        
            if($TimeB > $this->MaxExTime){$this->HardQuery = $query; $this->MaxExTime = $TimeB;}
            
                if( empty($this->ListQueryes) ) $this->ListQueryes = $query; else $this->ListQueryes .= "n".$query;
            
        $this->Queryes++;
        
        if(!$FreeMemory){
            return $this->LastQuery;
        }else return $this->FreeMemory();
        
        
    }
    /*======================================================================*
    Function:    Connect
    Descriiption: Соединяется с ДБ
    *======================================================================*/    
    private function Connect($host, $user, $pass, $base){
        $this->con =  @mysqli_connect($host, $user, $pass, $base) or $this->GetError(mysqli_connect_error());
    } 
    
    
    /*======================================================================*
    Function:    MultiQuery
    Descriiption: Множественный запрос
    *======================================================================*/    
    function MultiQuery($query){
    
        $TimeA = $this->get_time();
        mysqli_multi_query($this->con, $query) or $this->GetError(mysqli_connect_error());
        $TimeB = $this->get_time() - $TimeA;    
        $ret_data = array();
        $counter = 0;
            do{
        
                if ($result = mysqli_store_result($this->con)) {
                    
                    while ($row = mysqli_fetch_array($result)) {
                    $ret_data[$counter][] = $row;
                    }
                    mysqli_free_result($result);
                    $counter++;
                }
                
            }while(mysqli_next_result($this->con));
        
        
        $this->TimeQuery += $TimeB;
            
            if($TimeB > $this->MaxExTime){$this->HardQuery = $query; $this->MaxExTime = $TimeB;}
            
                if( empty($this->ListQueryes) ) $this->ListQueryes = $query; else $this->ListQueryes .= "n".$query;
            
        $this->Queryes++;
        
        return $ret_data;
    }
    
    /*======================================================================*
    Function:    get_time
    Descriiption: Возвращает строку времени
    *======================================================================*/    
    private function get_time()
    {
        list($seconds, $microSeconds) = explode(' ', microtime());
        return ((float) $seconds + (float) $microSeconds);
    }
    
    /*======================================================================*
    Function:    __destruct
    Descriiption: Выполняется при уничтожении экземпляра класса
    *======================================================================*/
    function __destruct(){
        
        if( !count($this->MySQLErrors) ) mysqli_close($this->con);
    
    }
    
    /*======================================================================*
    Function:    FreeMemory
    Descriiption: Освобождает память
    *======================================================================*/
    function FreeMemory()
    {
        $tr = ($this->LastQuery) ? true : false;
        @mysqli_free_result($this->LastQuery);
        return $tr;
    }
    
    /*======================================================================*
    Function:    RealEscape
    Descriiption: Фильтрация )
    *======================================================================*/
    function RealEscape($string)
    {
        if ($this->con) return mysqli_real_escape_string ($this->con, $string);
        else return mysql_escape_string($string);
    }
    
    /*======================================================================*
    Function:    NumRows
    Descriiption: Подсчет числа строк
    *======================================================================*/
    function NumRows()
    {
        return mysqli_num_rows($this->LastQuery);
    }
    
    /*======================================================================*
    Function:    fetch_array
    Descriiption: Возвращ массив, создает циферные ключи...
    *======================================================================*/
    function FetchArray(){
        //if($this->LastQuery)
        return mysqli_fetch_array($this->LastQuery);
    }
    
    /*======================================================================*
    Function:    NumRows
    Descriiption: Возвращает результат
    *======================================================================*/
    function FetchRow(){
        $xres = mysqli_fetch_row($this->LastQuery);
        
        return (count($xres) > 1) ? $xres :  $xres[0];
    }
    
    /*======================================================================*
    Function:    LastInsert()
    Descriiption: Возвращает последний ID вставки
    *======================================================================*/
    function LastInsert(){
        
        return @mysqli_insert_id($this->con);
        
    }
    
}
?>