gy-doc-code
[ class tree: gy-doc-code ] [ index: gy-doc-code ] [ all elements ]

Source for file PhpFileSqlClientForGy.php

Documentation is available at PhpFileSqlClientForGy.php

  1. <?php
  2.  
  3. namespace Gy\Core\Db;
  4.  
  5. use Gy\Core\AbstractClasses\Db;
  6.  
  7. if (!defined("GY_CORE"&& (GY_CORE !== true)) die"gy: err include core" );
  8.  
  9. /* PhpFileSqlClientForGy - класс для работы с базой данных PhpFileSql
  10.  *   https://github.com/ssv32/PhpFileSql
  11.  * class work PhpFileSql 
  12.  */
  13. class PhpFileSqlClientForGy extends Db
  14. {
  15.  
  16.     public $test = 'PhpFileSqlClient ok';
  17.     public $db//TODO private
  18.  
  19.     // даныне после запроса селект для метода fetch()
  20.     private $dataSelectForFetch = array();  
  21.  
  22.     /**
  23.      * clearResultMethodSelect()
  24.      *  - сбросит результаты запроса метода select
  25.      * 
  26.      * @return boolean 
  27.      */
  28.     private function clearResultMethodSelect()
  29.     {
  30.         $this->dataSelectForFetch = array();
  31.         return true;
  32.     }
  33.  
  34.     /* connect() - create connect in database
  35.     * @param $host
  36.     * @param $user
  37.     * @param $pass 
  38.     * @param $nameDb
  39.     * @param $port - не используется
  40.     * @return resurs, false
  41.     */
  42.     public function connect($dir$login$pass$nameDb$port false)
  43.     {
  44.         $phpFileSql new \PhpFileSql($dir);
  45.         $phpFileSql->connect($login$pass$nameDb);
  46.         
  47.         $this->db = $phpFileSql;
  48.         return $this;
  49.         
  50.     }
  51.  
  52.     /* query()  - out query in database //TODO
  53.      * @param $db - resurs (create self::connect()), $query - string query
  54.      * @return true - ok OR false - not ok
  55.      */
  56.     public function query($query)
  57.     {    
  58.         // 
  59.     }
  60.  
  61.     /*  close() - close connect database
  62.      * @param $db - resurs (create self::connect()) 
  63.      * @return true - ok OR false - not ok
  64.      */
  65.     public function close()
  66.     {
  67.         if (!empty($this->db)) {
  68.             $phpFileSql $this->db;
  69.             return $phpFileSql->close();
  70.         else {
  71.             return false;
  72.         }
  73.     }
  74.  
  75.     /** 
  76.      * fetch - получить порцию (строку) данных, после выполнения запроса в БД
  77.      * @param $res - результат отработки запроса в БД
  78.      * @return array 
  79.      */
  80.     public function fetch($res)
  81.     {
  82.         $res $this->dataSelectForFetch;
  83.         
  84.         $result false;
  85.         if (($res !== false&& is_array($res)) {
  86.  
  87.             // беру первое значение из него
  88.             $result array_shift($res);
  89.  
  90.             // записываем без первого значения
  91.             $this->dataSelectForFetch = $res;
  92.  
  93.         }
  94.         return $result;
  95.     }
  96.  
  97.     /**
  98.      * fetchAll - тоже что и fetch только в получит всё в виде массива (с ключём id элемента)
  99.      * @param $res - результат отработки запроса в БД
  100.      * @return array 
  101.      */
  102.     public function fetchAll($res$key 'id')
  103.     {
  104.         $result false;
  105.  
  106.         if (($res !== false&& is_array($res)) {
  107.             if ($key !== false {
  108.                 foreach ($res as $value{
  109.                     if (!empty($value[$key])) {
  110.                         $result[$value[$key]] $value;
  111.                     }
  112.                 }
  113.             else {
  114.                 $result $res;
  115.             }
  116.         }
  117.  
  118.         return $result;
  119.     }
  120.  
  121.     public function __construct($dbConfig)
  122.     {
  123.         if empty($this->db)) {
  124.             if (!empty($dbConfig)) {
  125.                 $this->connect($dbConfig['db_url']$dbConfig['db_user']$dbConfig['db_pass']$dbConfig['db_name']);
  126.             }
  127.         }
  128.     }
  129.  
  130.      /** //TODO
  131.      * selectDb - запрос типа select. на получение данных
  132.      * @param $db - расурс, коннект к базе данных
  133.      * @param string $tableName - имя таблицы
  134.      * @param array $propertys - параметры (какие поля вернуть или * - все)
  135.      * @param array $where - условия запроса, массив специальной структуры в виде дерева (может не быть)
  136.      * @return false or object result query
  137.      */
  138.     public function selectDb($tableName$propertys '*'$where false)
  139.     {
  140.  
  141.         // чуть подправить для совместимости
  142.         if ($propertys[0== '*'{
  143.             $propertys '*';
  144.         }
  145.  
  146.         // подготовить массив с условиями для класса PhpFileSql
  147.         $where $this->createTrueArrayWhereFromPhpFileSql($where);
  148.  
  149.         $dataResult $this->db->select($tableName$propertys$where);
  150.  
  151.         // записываю для метода fetch()
  152.         $this->dataSelectForFetch = $dataResult;
  153.  
  154.         return $dataResult;
  155.     }
  156.  
  157.     /**
  158.      * insertDb - вставка, добавление новых строк в базу данных
  159.      * @param string $tableName - имя таблицы
  160.      * @param array $propertys - параметры (поле = значение)
  161.      * @return false or object result query
  162.      */
  163.     public function insertDb($tableName$propertys)
  164.     {  
  165.         // сбросить данные предыдущего вызова метода select
  166.         $this->clearResultMethodSelect();
  167.  
  168.         global $CRYPTO;
  169.  
  170.         // если встречается пароль то засолить и зашифровать его
  171.         if (!empty($propertys['pass'])) {
  172.             $propertys['pass'md5($propertys['pass'].$CRYPTO->getSole());
  173.         }
  174.  
  175.         return  $this->db->insertInto($tableName$propertys);
  176.     }
  177.  
  178.     /**
  179.      * updateDb - обновить поле таблицы
  180.      * @param string $tableName - имя таблицы
  181.      * @param array $propertys - параметры (поле = значение)
  182.      * @param array $where - условия запроса, массив специальной структуры в виде дерева (может не быть)
  183.      * @return false or object result query
  184.      */
  185.     public function updateDb($tableName$propertys$where array())
  186.     {
  187.         // сбросить данные предыдущего вызова метода select
  188.         $this->clearResultMethodSelect();
  189.  
  190.         // подготовить массив с условиями для класса PhpFileSql
  191.         $where $this->createTrueArrayWhereFromPhpFileSql($where);
  192.  
  193.         // если встречается пароль то засолить и зашифровать его
  194.         global $CRYPTO;
  195.         if (!empty($propertys['pass'])) {
  196.             $propertys['pass'md5($propertys['pass'].$CRYPTO->getSole());
  197.         }
  198.  
  199.         return $this->db->update($tableName$propertys$where);
  200.     }
  201.  
  202.     /** // TODO сделать PRIMARY KEY AUTO_INCREMENT
  203.      * createTable - создать таблицу в базе данных
  204.      * @param string $tableName - имя таблицы
  205.      * @param array $propertys - параметры (приер  login varchar(50), name varchar(50) ...)
  206.      * @return false or object result query
  207.      */
  208.     public function createTable($tableName$propertys)
  209.     {
  210.         // сбросить данные предыдущего вызова метода select
  211.         $this->clearResultMethodSelect();
  212.  
  213.         // массив мараметров подходящий для PhpFileSql метода createTable
  214.         $arrayColumns array();
  215.  
  216.         // нужно подогнать свойства под метод класса PhpFileSql
  217.         foreach ($propertys as $val{
  218.             $attr explode(' '$val);
  219.             if( (count($attr)>2
  220.                 && ($attr[1== 'int' )
  221.                 && ($attr[2== 'PRIMARY')
  222.                 && ($attr[3== 'KEY')
  223.                 && ($attr[4== 'AUTO_INCREMENT')
  224.             
  225.                 // PRIMARY KEY AUTO_INCREMENT
  226.                 $arrayColumns[array($attr[0]'PRIMARY_KEY_AUTO_INCREMENT' );
  227.             else {
  228.                 $arrayColumns[$attr[0];
  229.             }
  230.         }
  231.  
  232.         return $this->db->createTable($tableName$arrayColumns);
  233.     }
  234.  
  235.     /** //TODO из за условий может работать не на всём, желательно ещё потестировать
  236.      * deleteDb - удаление строк из таблицы
  237.      * @param string $tableName - имя таблицы
  238.      * @param array $where - условия запроса, что удалять
  239.      * @return boolean 
  240.      */
  241.     public function deleteDb($tableName$where)
  242.     {
  243.         // сбросить данные предыдущего вызова метода select
  244.         $this->clearResultMethodSelect();
  245.         
  246.         // подготовить массив с условиями для класса PhpFileSql
  247.         $where $this->createTrueArrayWhereFromPhpFileSql($where);
  248.         
  249.         return $this->db->delete($tableName$where);
  250.     }
  251.  
  252.     /**
  253.      * createTrueArrayWhereFromPhpFileSql
  254.      *  - сделать массив where к виду подходящему для класса PhpFileSql
  255.      * 
  256.      * @param array $where 
  257.      * @return array 
  258.      */
  259.     public function createTrueArrayWhereFromPhpFileSql($where)
  260.     {
  261.  
  262.         if (is_array($where)) {
  263.             foreach ($where as $key0 => $value0{
  264.                 if (in_array($key0array('=''!='))) {
  265.                     $where[$key0][1str_replace("'"''$where[$key0][1]);
  266.                 elseif (in_array($key0array('AND''OR'))) {
  267.                     foreach ($value0 as $key1 => $value1{
  268.                         foreach ($value1 as $key2 => $value2{
  269.                             $where[$key0][$key1][$key2][1str_replace("'"''$where[$key0][$key1][$key2][1]);
  270.                         
  271.                     }
  272.                 }
  273.             
  274.         }  
  275.  
  276.         return $where;
  277.     }
  278.  
  279.     public function __destruct()
  280.     {
  281.         $this->close();
  282.     }
  283. }

Documentation generated on Sat, 27 Apr 2024 11:17:30 +0300 by phpDocumentor 1.4.3