Advertisement
Guest User

йоу

a guest
Sep 8th, 2016
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 6.87 KB | None | 0 0
  1. <?php
  2. //Класс для работы с БД
  3. abstract class AbstractDataBase{
  4.    
  5.     private $mysqli; //Идентификатор соединения
  6.     private $sq; //Строка заменяющая значение запросов
  7.     private $prefix; //Префикс у таблиц
  8.    
  9.     protected function __construct($db_host, $db_user, $db_password, $db_name, $sq, $prefix){
  10.         $this->mysqli = @new mysqli($db_host, $db_user, $db_password, $db_name);
  11.         if($this->mysqli->connect_errno) exit("<div style='font-size: 120%; text-align:center; position: relative; top: 35%; min-width: 600px;'><span style='border: 1px solid red; color: red; padding: 10px; margin-bottom: 10px;'>Ошибка соединение с БД</span><br /><br/><br/><span style='border: 1px solid red; color: red; padding: 10px;'>Введите корректные данные к БД, в конфигурационном файле!</span></div>");
  12.         $this->sq = $sq;
  13.         $this->prefix = $prefix;
  14.         $this->mysqli->query("SET 1c_time_names = 'ru_RU'"); //Устанавливаем локаль (Часовой пояс)
  15.         $this->mysqli->set_charset("utf8");
  16.     }
  17.    
  18.     public function getSQ(){
  19.         return $this->sq;
  20.     }
  21.    
  22.     public function getQuery($query, $params){ //Принимает запрос, и параметры
  23.         if($params){ //Алгорити замены спец символов на параметры в запроссе
  24.             $offset = 0; //Смещение
  25.             $len_sq = strlen($this->sq);
  26.             for($i = 0; $i < count($params); $i++){
  27.                 $pos = strpos($query, $this->sq, $offset); //Позиция вхождения спец знака
  28.                 if(is_null($params[$i])) $arg = "NULL";
  29.                 else $arg = "'".$this->mysqli->real_escape_string($params[$i])."'";
  30.                 $query = substr_replace($query, $arg, $pos, $len_sq);
  31.                 $offset = $pos + strlen($arg);
  32.             }
  33.         }
  34.         return $query;
  35.     }
  36.    
  37.     /*Занимаеться выборкой в таблице значений принимает в качестве параметра обьект*/
  38.     public function select(AbstractSelect $select){ //Строка с запросом, просто в виде обьекта
  39.         $result_set = $this->getResultSet($select, true, true);
  40.         if(!$result_set) return false;
  41.         $array = array();
  42.         while(($row = $result_set->fetch_assoc()) != false){
  43.             $array[] = $row;
  44.         }
  45.         return $array;
  46.     }
  47.     /*Занимаеться выборкой в таблице значений принимает в качестве параметра обьект*/
  48.    
  49.     /*Метод позволяющий извлечь строку из таблицы*/
  50.     public function selectRow(AbstractSelect $select){
  51.         $result_set = $this->getResultSet($select, false, true);
  52.         if(!$result_set) return false;
  53.         return $result_set->fetch_assoc();
  54.     }
  55.     /*Метод позволяющий извлечь строку из таблицы*/
  56.    
  57.     /*Метод позволяющий извлечь стобец из таблицы*/
  58.     public function selectCol(AbstractSelect $select){
  59.         $result_set = $this->getResultSet($select, true, true);
  60.         if(!$result_set) return false;
  61.         $array = array();
  62.         while(($row = $result_set->fetch_assoc()) != false){
  63.             foreach($row as $value){
  64.                 $array[] = $value;
  65.                 break;
  66.             }
  67.         }
  68.         return $array;
  69.     }
  70.     /*Метод позволяющий извлечь стобец из таблицы*/
  71.    
  72.     /*Метод позволяющий извлечь содержимое ячейки*/
  73.     public function selectCell(AbstractSelect $select){
  74.         $result_set = $this->getResultSet($select, false, true);
  75.         if(!$result_set) return false;
  76.         $array = array_values($result_set->fetch_assoc());
  77.         return $array[0];
  78.     }
  79.     /*Метод позволяющий извлечь содержимое ячейки*/
  80.    
  81.     /*Метод вставки в таблицу*/
  82.     public function insert($table_name, $row){
  83.         if(count($row) == 0) return false;
  84.         $table_name = $this->getTableName($table_name);
  85.         $fields = "(";
  86.         $values = "VALUES (";
  87.         $params = array();
  88.         foreach($row as $key => $value){
  89.             $fields .= "`$key`,";
  90.             $values .= $this->sq.",";
  91.             $params[] = $value;
  92.         }
  93.         $fields = substr($fields, 0, -1);
  94.         $values = substr($values, 0, -1);
  95.         $fields .= ")";
  96.         $values .= ")";
  97.         $query = "INSERT INTO `$table_name` $fields $values";
  98.         return $this->query($query, $params);
  99.     }
  100.     /*Метод вставки в таблицу*/
  101.    
  102.     /*Метод обновления записей в таблице*/
  103.     public function update($table_name, $row, $where = false, $params = array()){
  104.         if(count($row) == 0) return false;
  105.         $table_name = $this->getTableName($table_name);
  106.         $query = "UPDATE `$table_name` SET ";
  107.         $params_add = array();
  108.         foreach($row as $key => $value){
  109.             $query .= "`$key` = ".$this->sq.",";
  110.             $params_add[] = $value;
  111.         }
  112.         $query = substr($query, 0, -1);
  113.         if($where){
  114.             $params = array_merge($params_add, $params);
  115.             $query .= "WHERE $where";
  116.         }
  117.         return $this->query($query, $params);
  118.     }
  119.     /*Метод обновления записей в таблице*/
  120.    
  121.     /*Метод удаление записей в таблице*/
  122.     public function delete($table_name, $where = false, $params = array()){
  123.         $table_name = $this->getTableName($table_name);
  124.         $query = "DELETE FROM `$table_name`";
  125.         if($where){
  126.             $query .= "WHERE $where";
  127.         }
  128.         return $this->query($query, $params);
  129.     }
  130.     /*Метод удаление записей в таблице*/
  131.    
  132.     /*Получение полного название таблицы*/
  133.     public function getTableName($table_name){
  134.         return $this->prefix.$table_name;
  135.     }
  136.     /*Получение полного название таблицы*/
  137.    
  138.     /*Выполнение запроса*/
  139.     private function query($query, $params = false){
  140.         $success = $this->mysqli->query($this->getQuery($query, $params));
  141.         if(!$success) return false;
  142.         if($this->mysqli->insert_id === 0) return true;
  143.         return $this->mysqli->insert_id;
  144.     }
  145.     /*Выполнение запроса*/
  146.    
  147.     /*Выборка записей передаеться обьект запроса, может ли быть в качестве выборки ноль записей, может ли быть в качестве выборки одна запись*/
  148.     private function getResultSet(AbstractSelect $select, $zero, $one){
  149.         $result_set = $this->mysqli->query($select);
  150.         if(!$result_set) return false;
  151.         if((!$zero) && ($result_set->num_rows == 0)) return false;
  152.         if((!$one) && ($result_set->num_rows == 1)) return false;
  153.         return $result_set;
  154.     }
  155.     /*Выборка записей передаеться обьект запроса, может ли быть в качестве выборки ноль записей, может ли быть в качестве выборки одна запись*/
  156.    
  157.     public function __destruct(){
  158.         if (($this->mysqli) && (!$this->mysqli->connect_errno)) $this->mysqli->close();
  159.     }
  160. }
  161.    
  162. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement