Вход Регистрация
Файл: engine/classes/Query_builder.php
Строк: 134
<?php
    
   
/**
    * @author Tadochi aka Patsifist <Tadochi@spaces.ru>
    * @version 0.1
    * Класс Query builder. Наверное и так понятно для чего она
    * Пример / Example
    * $builder = new Query_builder;
    * $builder->
    *       select('id', 'nick')->
    *      from('user')->
    *      where('id', '=', '1')->
    *      or_where('id', '=', '2')->
    *      and_where('nick', 'in', '1,2,3,4,5');
    * Чтобы сделать запрос
    * $sql->query($builder->query);
    */


    
Class Query_builder
    
{

       
/**
        * $var $operation string Содержит название операции
        */

        
public $operation;

        
       
/**
        * $var operands array все допустимые операнды
        */
        
        
public $operands = array('=''>''<''<>''!=''<=''>=''LIKE''IN''<>');

       
/**
        * $var query содержит сам запрос
        */

        
public $query;



       
/**
        * Хелпер для установки типа операции
        */

        
public function operation($operation)
        {
            if (empty(
$this->operation))
                
$this->operation $operation;
            else
                exit(
'Тип операции уже определен');
        }


       
/**
        * Хелпер - конструктор строки с полями
        */

        
public function fields_maker(array $fields$set false)
        {
            
$i 0;
            
$count count($fields);
            
$string null;

            if (
$set)
            {
                foreach (
$fields as $field => $value)
                {
                    
$string .= '`' $field "` = '".$value."'" . (++$i != $count ', ' null);
                }
            }
            else
            {
                foreach (
$fields as $field)
                {
                    
$string .= '`' $field '`' . (++$i != $count ', ' null);
                }
            }
            
//$this->query = ' SET '.$string;
            
return  $string;
        }

       
/*
        * Хелпер констуктор условий
        */

        
public function cond_maker($cond1$operand$cond2)
        {
            if (
in_array($operand$this->operands))
            {
                if (
$operand == 'IN'
                    return 
"`".$cond1."` in('".$cond2."') ";
                else
                    return 
"`".$cond1."` ".$operand." '".$cond2."' ";
            }
            else
                exit(
'Неизвестный операнд '$operand PHP_EOL '<br />Список операндов: 'implode(','$this->operands));
        }


       
/**
        * Хелпер для сброса запроса
        */

        
public function reset()
        {
            
$this->query $this->operation null;
            return 
$this;
        }

        
// Operations

        
public function select($fields)
        {
            
$this->operation('SELECT');
            
$args func_get_args();
            
$this->query 'SELECT ' . (is_array($args[0]) ? $this->fields_maker($args[0]) : $this->fields_maker($args)) . ' ';
            return 
$this;
        }

        public function 
delete($table)
        {
            
$this->operation('DELETE');
            
$this->query 'DELETE FROM `'.$table.'` ';
            return 
$this;
        }

        public function 
update($table)
        {
            
$this->operation('UPDATE');
            
$this->query 'UPDATE `'.$table.'` ';
            return 
$this;
        }

        public function 
insert($table)
        {
            
$this->operation('INSERT');
            
$this->query 'INSERT INTO `'.$table.'` ';
            return 
$this;
        }



        
        public function 
from($table)
        {
            
strtoupper($this->operation) == 'SELECT' $this->query .= ' FROM `' $table '` ' null;
            return 
$this;
        }

        public function 
order($field$type)
        {
            if (
strtoupper($this->operation) == 'SELECT')
                
$this->query .= 'ORDER BY `'.$field.'` ' . (strtoupper($type) == 'DESC' 'DESC' 'ASC') . ' ';
            return 
$this;
        }

        public function 
limit($limit)
        {
            
$this->query .= $this->operation != 'INSERT' 'LIMIT ' $limit null;
            return 
$this;
        }
        
        public function 
set($args)
        {
            
$set $this->operation == 'INSERT' || $this->operation 'UPDATE';
            
$this->query .= ' SET ' $this->fields_maker($args$set);
            return 
$this;
        }

        public function 
where($cond1$operand$cond2)
        {
            
$this->query .= $this->operation != 'INSERT' ' WHERE ' $this->cond_maker($cond1strtoupper($operand), $cond2) : null;
            return 
$this;
        }

        public function 
or_where($cond1$operand$cond2)
        {
            
$this->query .= $this->operation != 'INSERT' 'OR ' $this->cond_maker($cond1strtoupper($operand), $cond2) : null;
            return 
$this;
        }

        public function 
and_where($cond1$operand$cond2)
        {
            
$this->query .= $this->operation != 'INSERT' 'AND ' $this->cond_maker($cond1strtoupper($operand), $cond2) : null;
            return 
$this;
        }
    }
Онлайн: 2
Реклама