Вход Регистрация
Файл: sys/inc/classes/class.db.php
Строк: 191
<?php 

class db 
{
    private static 
$instance;
 
    
/**
     * Реализация Singleton pattern
     */
    
public static function instance()
    {
        return 
self::$instance;
    }

    public static function 
is_exsits_column($table_name, $column_name) 
    {
        
$columns = array(); 
        
$rows = self::select("SELECT COLUMN_NAME AS name FROM INFORMATION_SCHEMA.columns WHERE TABLE_NAME = '" . $table_name . "'"); 
        foreach(
$rows AS $column) {
            if(isset(
$column['name'])) {
                
$columns[] = $column['name']; 
            }
        }

        if (
in_array($column_name, $columns)) {
            return 
true; 
        }
        return 
false; 
    }
 
    
/**
     * Возвращает несколько рядов
     *
     * @param string  $query
     * @param bool    $hasArray
     * @return array
     */
    
public static function select($query, $hasArray = true)
    {
        
$mysqli_result = self::instance()->query($query);
        if (
$mysqli_result) {
            
$r = array();

            while (
$row = $mysqli_result->fetch_object()) {
                
$r[] = $hasArray ? (array) $row : $row;
            }
 
            return 
$r;
        }
 
        return array();
    }
 
    
/**
     * Возвращает один ряд таблицы
     *
     * @param string  $query
     * @param bool    $hasArray
     * @return array
     */
    
public static function fetch($query, $hasArray = true)
    {
        
$mysqli_result = self::instance()->query($query);
        if (
$mysqli_result) {
            
$row = $mysqli_result->fetch_assoc();
            if (
$row) {
                if (
$hasArray) {
                    return (array) 
$row;
                }
                else {
                    return 
$row;
                }
            }
        }
 
        return array();
    }
 
    
/**
     * Возвращает массив значений одного поля
     *
     * @param $query  $query
     * @return array
     */
    
public static function get_row($query)
    {
        
$rows = self::select($query);
        return 
array_map(function ($row) {
            return 
array_shift($row);
        }, 
$rows);
    }
 
    
/**
     * Возвращает значение одного поля
     *
     * @param string $query
     * @return string
     */
    
public static function count($query)
    {
        
$count = 0;
        
$mysqli_result = self::instance()->query($query);
        if(
$mysqli_result) {
            
$row = $mysqli_result->fetch_row();
            if (
$row) {
                
$count = (int) $row[0];
            }
        }
 
        return 
$count;
    }

    public static function 
get_type($str) {
        if (
ctype_digit((string) $str)) {
            return (
$str <= PHP_INT_MAX ? 'i' : 's');
        }

        if (
is_numeric($str)) {
            return 
'd'; 
        }

        return 
's'; 
    }

    
/**
    * Обновление записи  
    * @table Имя таблицы 
    * @query Массив с ключами и значениями
    * @where Массив с ключами и значениями 
    */ 
    
public static function update($table, $query, $where = array(), $limit = NULL) 
    {
        
$query = self::get_construct_query_update($query);
        
$where = self::get_construct_query_where($table, $where);

        
$sql = 'UPDATE `' . $table . '` SET ' . join(',', $query['query_keys']) . ' WHERE 1=1 ' . $where . ' ' . $limit;

        if (
$stmt = self::instance()->prepare($sql)) {
            
$types = ''; 
            foreach(
$query['query_params'] AS $value) {
                
$types .= self::get_type($value); 
                
$bind_name = $value;
                $
$bind_name = $value;
                
$params[] = &$$bind_name;
            }

            
call_user_func_array(array($stmt, 'bind_param'), array_merge(array($types), $params));

            if (
$stmt->execute()) {
                
$stmt->close();
                return 
true;
            }
        }

        return 
false; 
    }

    
/**
    * Удаление записи  
    * @table Имя таблицы 
    * @where Массив с ключами и значениями 
    */ 
    
public static function delete($table, $where = array(), $limit = '') 
    {
        
$where = self::get_construct_query_where($table, $where);

        
$sql = 'DELETE FROM `' . $table . '` WHERE 1=1 ' . $where . ' ' . $limit;

        if (
$stmt = self::instance()->prepare($sql)) {
            if (
$stmt->execute()) {
                
$stmt->close();
                return 
true;
            }
        }

        return 
false; 
    }

    
/**
    * Создание записи  
    * @table Имя таблицы 
    * @query Массив с ключами и значениями
    */ 
    
public static function insert($table, $query) 
    {
        
$query = self::get_construct_query_insert($query);
        
$sql = "INSERT INTO `" . $table . "` (" . join(',', $query['query_keys']) . ") VALUES(" . join(',', $query['query_values']) . ")";

        if (
$stmt = self::instance()->prepare($sql)) {
            
$types = ''; 
            foreach(
$query['query_params'] AS $value) {
                
$types .= self::get_type($value); 
                
$bind_name = $value;
                $
$bind_name = $value;
                
$params[] = &$$bind_name;
            }

            
call_user_func_array(array($stmt, 'bind_param'), array_merge(array($types), $params));

            if (
$stmt->execute()) {
                
$stmt->close();
                return 
true;
            }
        }

        return 
false; 
    }

    public static function 
query($query)
    {
        return 
self::instance()->query($query);
    }
 
    public static function 
error()
    {
        return 
self::instance()->error;
    }
 
    public static function 
insert_id()
    {
        return 
self::instance()->insert_id;
    }
 
    
/**
     * Устанавливает коннект с БД
     */
    
public static function connect($host, $user, $pass, $name)
    { 
        
$mysqli = new mysqli($host, $user, $pass, $name);

        if (
$mysqli->connect_errno) { 
            
ds_die(sprintf("Failed to connect to database, error code: %s", $mysqli->connect_errno));
        }
        
        
db::$instance = $mysqli;
    }

    public static function 
esc( $str ) {
        return 
self::instance()->real_escape_string($str); 
    }

    public static function 
get_construct_query_insert($array) 
    {
        
$construct = array(
            
'query_keys' => array(), 
            
'query_values' => array(), 
            
'query_params' => array(), 
        ); 

        foreach(
$array AS $key => $value) {
            
array_push($construct['query_keys'], '`' . $key . '`');
            
array_push($construct['query_values'], '?');
            
array_push($construct['query_params'], $value);
        }

        return 
$construct;
    }

    public static function 
get_construct_query_update($array) 
    {
        
$construct = array(
            
'query_keys'   => array(), 
            
'query_params' => array(), 
        ); 

        foreach(
$array AS $key => $value) {
            
array_push($construct['query_keys'], "`" . $key . "` = ?");
            
array_push($construct['query_params'], $value);
        }

        return 
$construct;
    }

    public static function 
get_construct_query_where($table, $args, $before = ' AND ') 
    {
        
$sql = array(); 
        
$str = " " . $before . " (";

        foreach(
$args AS $key => $value) {
            if (isset(
$value['field'])) {
                if (!isset(
$value['operator'])) {
                    
$value['operator'] = '=';
                }
                
$sql[] = $table . '.' . $value['field'] . ' ' . strtoupper($value['operator']) . ' '' . self::esc($value['value']) . ''';
            }  
            
            elseif (isset(
$value['relation'])) {
                
$sql[] = self::get_construct_query_where($table, $value); 
            }

            elseif (!
is_array($value)) {
                
$sql[] = $table . '.' . $key . ' = '' . self::esc($value) . ''';
            }
        }

        if (!isset(
$args['relation'])) {
            
$args['relation'] = 'AND';
        }

        if (!
$sql) {
            return 
'';
        }
        
        
$str .= implode(' ' . strtoupper($args['relation']) . ' ', $sql); 
        
$str .= ")";
       
        return 
$str; 
    }
    
}
Онлайн: 3
Реклама