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

Source for file PgSql.php

Documentation is available at PgSql.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. /** 
  10.  * PgSql - класс для работы с базой данных PostgreSQL
  11.  * class work PostgreSQL
  12.  */
  13. class PgSql extends Db
  14. {
  15.  
  16.     public $test = 'pgsql ok';
  17.     public $defaultPort = '5432';
  18.     public $db;
  19.  
  20.     /* connect() - create connect in database
  21.     * @param $host
  22.     * @param $user
  23.     * @param $pass 
  24.     * @param $nameDb
  25.     * @param $port
  26.     * @return resurs, false
  27.     */
  28.     public function connect($host$user$pass$nameDb$port)
  29.     {        
  30.         $this->db = pg_connect("host=".$host." port=".$port." dbname=".$nameDb." user=".$user." password=".$pass);
  31.         return $this->db;
  32.     }
  33.  
  34.     /* query()  - out query in database
  35.      * @param $db - resurs (create self::connect()), $query - string query
  36.      * @return true - ok OR false - not ok
  37.      */
  38.     public function query($query)
  39.     {
  40.         return pg_query($this->db$query);
  41.     }
  42.  
  43.     /*  close() - close connect database
  44.      * @param $db - resurs (create self::connect())
  45.      * @return true - ok OR false - not ok
  46.      */
  47.     public function close()
  48.     {
  49.         return pg_close($this->db);
  50.     }
  51.  
  52.     /**
  53.      * fetch - получить порцию (строку) данных, после выполнения запроса в БД
  54.      * @param $res - результат отработки запроса в БД
  55.      * @return array 
  56.      */
  57.     public function fetch($res)
  58.     {
  59.         $result array();
  60.         if ($res !== false{
  61.             $result pg_fetch_assoc($res);
  62.         }
  63.         return $result;
  64.     }
  65.  
  66.     /**
  67.      * fetchAll - тоже что и fetch только в получит всё в виде массива (с ключём id элемента)
  68.      * @param $res - результат отработки запроса в БД
  69.      * @return array 
  70.      */
  71.     public function fetchAll($res$key 'id')
  72.     {
  73.         $result array();
  74.         while ($arRes self::fetch($res)) {
  75.             if ($key !== false{
  76.                 $result[$arRes[$key]] $arRes;
  77.             else {
  78.                 $result[$arRes;
  79.             }
  80.         }
  81.         return $result;
  82.     }
  83.  
  84.     public function __construct($dbConfig
  85.     {
  86.         if empty($this->db)) {
  87.             if (!empty($dbConfig)) {
  88.                 if (empty($dbConfig['db_port'])) {
  89.                     $dbConfig['db_port'$this->defaultPort;
  90.                 }
  91.                 $this->connect(
  92.                     $dbConfig['db_host']
  93.                     $dbConfig['db_user']
  94.                     $dbConfig['db_pass']
  95.                     $dbConfig['db_name']
  96.                     $dbConfig['db_port']
  97.                 );
  98.             }
  99.         }
  100.     }
  101.  
  102.     /**
  103.      * isOneVersionWhere
  104.      *  (ru) - проверит соответствует ли условие, условию как ниже (первый вариант)
  105.      *         (пока поддерживается только сравнение и не рано '=', '!=' )
  106.      *  
  107.      *  (en) - will check whether it matches the condition, the condition as below (first option)
  108.      *         (so far only comparison is supported and not early '=', '! =')
  109.      * 
  110.      *  $where = array(
  111.      *    '=' => array(
  112.      *       'login',
  113.      *       'asd2'
  114.      *    )
  115.      *  )
  116.      * 
  117.      * @param array $where -
  118.      *         (ru) - условие (пример выше, что то типа дерева)
  119.      *         (en) - condition (example above, something like a tree)
  120.      * @return boolean 
  121.      */        
  122.     private function isOneVersionWhere($where)
  123.     {
  124.         $result false;
  125.         if (count($where== 1{
  126.             foreach ($where as $key => $value{
  127.                 if (in_array($keyarray('=''!=' )) && (count($value== 2)) {
  128.                     $result true;
  129.                 }
  130.             }
  131.             $value array_shift($where);
  132.  
  133.         }
  134.         return $result;
  135.     }
  136.  
  137.     /**
  138.      * isTwoVersionWhere
  139.      *  (ru) - проверит соответствует ли условие, условию как ниже (второй вариант)
  140.      *         (пока поддерживается только сравнение и не рано '=', '!=' и связки 'AND', 'OR' )
  141.      *  
  142.      *  (ru) - will check whether the condition matches the condition as below (second option)
  143.      *         (so far only comparison is supported and not early '=', '! =' and the 'AND', 'OR' connectives)
  144.      * 
  145.      *  $where = array(
  146.      *      'OR' => array(
  147.      *          array(
  148.      *              '=' => array(
  149.      *                  'login',
  150.      *                  'asd2'
  151.      *              ),
  152.      *          ),
  153.      *          array(
  154.      *              '!=' => array(
  155.      *                  'login',
  156.      *                  'asd'
  157.      *              ),
  158.      *          ),
  159.      *          array(
  160.      *              '!=' => array(
  161.      *                  'login',
  162.      *                  'asd'
  163.      *              ),
  164.      *          ),
  165.      *      )
  166.      *  )
  167.      * 
  168.      * @param array $where -
  169.      *         (ru) - условие (пример выше, что то типа дерева)
  170.      *         (en) - condition (example above, something like a tree)
  171.      * @return boolean 
  172.      */ 
  173.     private function isTwoVersionWhere($where)
  174.     {
  175.         $result true;
  176.         foreach ($where as $key => $value{
  177.             if (in_array($keyarray('OR''AND'))) {
  178.                 foreach ($value as $value2{
  179.                     if (!$this->isOneVersionWhere($value2)) {
  180.                         $result false;
  181.                     }
  182.                 }
  183.             else {
  184.                 $result false;
  185.             }
  186.         }
  187.         return $result;
  188.     }
  189.  
  190.     /**
  191.      * getStrOneTypeWhere
  192.      *  (ru) - соберёт строчку с условием определённого вида,
  193.      *         для условий из массива $where (метода например select) 1 варианта
  194.      * 
  195.      *  (en) - will collect a line with a condition of a certain kind,
  196.      *         for conditions from the array $where (for example, select parameters) 1 option
  197.      * 
  198.      * @param array $where 
  199.      * @return string 
  200.      */
  201.     private function getStrOneTypeWhere($where)
  202.     {
  203.         $result false;
  204.         if (!empty($where['='])) {
  205.             $where['='][0$where['='][0];
  206.             $result $where['='][0]." = ".$where['='][1];
  207.         elseif (!empty($where['!='])) {
  208.             $where['!='][0$where['='][0];
  209.             $result $where['!='][0]." != ".$where['!='][1];
  210.         }
  211.         return $result;
  212.     }
  213.  
  214.     /**
  215.      * getStrOneTypeWhere
  216.      *  (ru) - соберёт строчку с условием определённого вида,
  217.      *         для условий из массива $where (метода например select) 2 варианта
  218.      * 
  219.      *  (en) - will collect a line with a condition of a certain kind,
  220.      *         for conditions from the array $where (for example, select parameters) 2 option
  221.      * 
  222.      * @param array $where 
  223.      * @return string 
  224.      */
  225.     private function getStrTwoTypeWhere($where)
  226.     {
  227.         $result '';
  228.         if!empty($where['AND'])) {
  229.             foreach ($where['AND'as $val{
  230.                 $result .= ((!empty($result))' AND ''').$this->getStrOneTypeWhere$val );
  231.             }
  232.         elseif (!empty($where['OR'])) {
  233.             foreach ($where['OR'as $val{
  234.                 $result .= ((!empty($result))' OR ''').$this->getStrOneTypeWhere($val);
  235.             }
  236.         }
  237.         return $result;
  238.     }
  239.  
  240.     /**
  241.      * parseWhereForQuery - парсинг параметров where запроса
  242.      *   массив будет в виде дерева, т.е. конечные массивы должны состоять из 2х элементов
  243.      * @param type $where 
  244.      * @param type $i 
  245.      * @param type $key2 
  246.      * @return type 
  247.      */    
  248.     private function parseWhereForQuery($where)
  249.     
  250.  
  251.         $strWhere '';
  252.         if ($this->isOneVersionWhere($where)) {
  253.             // (ru) - если условия 1 варианта
  254.             // (en) - if conditions 1 options
  255.             $strWhere $this->getStrOneTypeWhere($where);
  256.  
  257.         elseif($this->isTwoVersionWhere($where)) {
  258.             // (ru) - если условие 2 варианта
  259.             // (en) - if condition 2 options
  260.             $strWhere $this->getStrTwoTypeWhere($where);
  261.         
  262.         // (ru) - остальное пока не поддерживается
  263.         // (en) - the rest is not yet supported
  264.  
  265.         return $strWhere;
  266.     }
  267.  
  268.      /**
  269.      * selectDb - запрос типа select. на получение данных
  270.      * @param $db - расурс, коннект к базе данных
  271.      * @param string $tableName - имя таблицы
  272.      * @param array $propertys - параметры (какие поля вернуть или * - все)
  273.      * @param array $where - условия запроса, массив специальной структуры в виде дерева (может не быть)
  274.      * @return false or object result query
  275.      */
  276.     public function selectDb($tableName$propertys$where array())
  277.     {
  278.         $query 'SELECT ';
  279.  
  280.         //$propertys = $this->allValueArrayInMbStrtolower($propertys);
  281.  
  282.         $strPropertys implode(","$propertys);
  283.  
  284.         if (!empty($where)) {
  285.             $where ' WHERE '.$this->parseWhereForQuery($where);
  286.         else {
  287.             $where '';
  288.         }
  289.  
  290.         $query .= $strPropertys.' FROM '.$tableName.$where.';';
  291.  
  292.         return  $this->query($query);
  293.     }
  294.  
  295.     private static function allValueArrayInMbStrtolower($array)
  296.     {
  297.  
  298.         foreach ($array as $key => $value{
  299.             $where[$keymb_strtolower($value);
  300.         }
  301.         return $where;
  302.     }
  303.  
  304.     /**
  305.      * insertDb - вставка, добавление новых строк в базу данных
  306.      * @param string $tableName - имя таблицы
  307.      * @param array $propertys - параметры (поле = значение)
  308.      * @return false or object result query
  309.      */
  310.     public function insertDb($tableName$propertys)
  311.     {
  312.         $query '';
  313.  
  314.         // разбить параметры на два списка через запятую // TODO вынести куда то
  315.         global $CRYPTO;
  316.         $nameProperty '';
  317.         $valueProperty '';
  318.         foreach ($propertys as $key=> $val{
  319.             $nameProperty .= (($nameProperty != '')', ''').$key;
  320.  
  321.             if ($key == 'pass'{
  322.                 $val md5($val.$CRYPTO->getSole());
  323.             }
  324.  
  325.             if (!is_numeric($val)) {
  326.                 $val "'".$val."'";
  327.             }
  328.  
  329.             $valueProperty .= (($valueProperty != '')', ''').$val;
  330.         }
  331.         ////
  332.  
  333.         $query "INSERT INTO ".$tableName." (".$nameProperty." ) VALUES(".$valueProperty.")";
  334.  
  335.         return  $this->query($query);
  336.     }
  337.  
  338.     /**
  339.      * updateDb - обновить поле таблицы
  340.      * @param string $tableName - имя таблицы
  341.      * @param array $propertys - параметры (поле = значение)
  342.      * @param array $where - условия запроса, массив специальной структуры в виде дерева (может не быть)
  343.      * @return false or object result query
  344.      */
  345.     public function updateDb($tableName$propertys$where array())
  346.     {
  347.         $query 'UPDATE ';
  348.         $textPropertys '';
  349.         global $CRYPTO;
  350.         foreach ($propertys as $key => $val{
  351.  
  352.             if ($key == 'pass'{
  353.                 $val md5($val.$CRYPTO->getSole());
  354.             }
  355.  
  356.             if (!is_numeric($val)) {
  357.                 $val "'".$val."'";
  358.             }
  359.             $textPropertys .= ((!empty($textPropertys))',''').' '.$key.'='.$val;
  360.         }
  361.  
  362.         if (!empty($where)) {
  363.             $where ' WHERE '.$this->parseWhereForQuery($where);
  364.         else {
  365.             $where '';
  366.         }
  367.  
  368.         $query .= $tableName.' SET '.$textPropertys.$where.';';
  369.  
  370.         return  $this->query($query);
  371.     }
  372.  
  373.     /**
  374.      * createTable - создать таблицу в базе данных
  375.      * @param string $tableName - имя таблицы
  376.      * @param array $propertys - параметры (приер  login varchar(50), name varchar(50) ...)
  377.      * @return false or object result query
  378.      */
  379.     public function createTable($tableName$propertys)
  380.     {
  381.         $query '';
  382.         $textPropertys '';
  383.  
  384.         foreach ($propertys as $val{
  385.             $strPos strpos($val'int PRIMARY KEY AUTO_INCREMENT');
  386.             if ($strPos !== false{
  387.                 $val str_replace('int PRIMARY KEY AUTO_INCREMENT''SERIAL PRIMARY KEY'$val);
  388.             }
  389.             $textPropertys .= ((!empty($textPropertys))',''').' '.$val;
  390.         }
  391.         $query 'CREATE TABLE IF NOT EXISTS '.$tableName.' ('.$textPropertys.');';
  392.  
  393.         return  $this->query($query);
  394.     }
  395.  
  396.     /**
  397.      * deleteDb - удаление строк из таблицы
  398.      * @param string $tableName - имя таблицы
  399.      * @param array $where - условия запроса, что удалять
  400.      * @return boolean 
  401.      */
  402.     public function deleteDb($tableName$where)
  403.     {
  404.         $query '';
  405.         if (!empty($where)) {
  406.             $where ' WHERE '.$this->parseWhereForQuery($where);
  407.         else {
  408.             $where '';
  409.         }
  410.  
  411.         $query 'DELETE FROM '.$tableName.$where;
  412.  
  413.         return $this->query($query);
  414.     }
  415.  
  416.     public function __destruct(
  417.     {
  418.         if (!empty($this->db)) {
  419.             $this->close($this->db);
  420.         }
  421.     }
  422. }

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