<?php

/*
-------------------------------
Класс для работы с базой данных
-------------------------------
*/  
  
CLASS DB
{
  
  //Объект PDO
  PUBLIC STATIC $DB = NULL;
  
  PUBLIC STATIC $ST = NULL;
  
  //SQL запрос
  PUBLIC STATIC $QUERY = '';
  
  /*
  --------------------------------------
  Подключение драйвера PDO к базе данных
  --------------------------------------
  */
  
  PUBLIC STATIC FUNCTION CONNECT($status = 1)
  {
    IF (!SELF::$DB) {
      
      TRY {
        
        SELF::$DB = NEW PDO(
          'mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset=utf8', 
          DB_USER, 
          DB_PASSWORD,
          ARRAY(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'")
        );
        
        SELF::$DB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
        
      } CATCH (PDOException $e) {
        
        IF ($status == 1){
          
          ECHO "Нет подключения к базе данных<br /><br />";
          ECHO "Параметры ошибки:<br /> " . $e->getMessage();
          ECHO "<hr>";
          
        }
        
      }
      
    }
    
    RETURN SELF::$DB;
    
  }
  
  /*
  --------------------------------------
  Получение 1 строки из таблицы
  --------------------------------------
  */
  
  PUBLIC STATIC FUNCTION GET_STRING($query, $param = ARRAY())
  {
    
    IF (SELF::CONNECT(0)){
      
      SELF::$ST = SELF::CONNECT()->PREPARE($query);
      SELF::$ST->EXECUTE((ARRAY) $param);
      
      RETURN SELF::$ST->FETCH(PDO::FETCH_ASSOC);
    
    }
    
  } 
  
  /*
  --------------------------------------
  Получение всех строк из таблицы
  --------------------------------------
  */
  
  PUBLIC STATIC FUNCTION GET_STRING_ALL($query, $param = ARRAY())
  {
    
    IF (SELF::CONNECT(0)){
      
      SELF::$ST = SELF::CONNECT()->PREPARE($query);
      SELF::$ST->EXECUTE((ARRAY) $param);
      
      RETURN SELF::$ST;
      
    }
    
  }
  
  /*
  ------------------------------
  Получение 1 столбца из таблицы
  ------------------------------
  */
  
  PUBLIC STATIC FUNCTION GET_COLUMN($query, $param = ARRAY())
  {
    
    IF (SELF::CONNECT(0)){
      
      SELF::$ST = SELF::CONNECT()->PREPARE($query);
      SELF::$ST->EXECUTE((ARRAY) $param);
      
      RETURN SELF::$ST->FETCHCOLUMN();
      
    }
    
  }
  
  /*
  ---------------------------
  Добавление строки в таблицу
  ---------------------------
  */
  
  PUBLIC STATIC FUNCTION GET_ADD($query, $param = ARRAY())
  {
    
    IF (SELF::CONNECT(0)){
      
      SELF::$ST = SELF::CONNECT()->PREPARE($query);
      
      RETURN (SELF::$ST->EXECUTE((ARRAY) $param)) ? SELF::CONNECT()->LASTINSERTID() : 0;
      
    }
    
  }
  
  /*
  -----------------------------------
  Изменение/удаление строки в таблице
  -----------------------------------
  */
  
  PUBLIC STATIC FUNCTION GET_SET($query, $param = ARRAY())
  {
    
    IF (SELF::CONNECT(0)){
      
      SELF::$ST = SELF::CONNECT()->PREPARE($query);
      
      RETURN SELF::$ST->EXECUTE((ARRAY) $param);
      
    }
    
  }
  
  /*
  ---------------------------------------------
  Выполнение запроса в базу данных из SQL файла
  ---------------------------------------------
  */
  
  PUBLIC STATIC FUNCTION GET_SQL_FILE($path_file)
  {

    $file = FILE_GET_CONTENTS($path_file);
    
    $data = EXPLODE(';' , $file);
    
    IF ($file){
      
      FOREACH ($data AS $el){
        
        DB::GET_ADD($el);
        
      }
      
      RETURN 1;
    
    }ELSE{
      
      RETURN 0;
    
    }
    
  }

}
  
?>