Вход Регистрация
Файл: 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
    }
    
}
Онлайн: 1
Реклама