Этот сайт не наркоманов. Это сайт программистов.

Добро пожаловать на Пыху!

Логин:
Пароль:
 

Нет прописки? Зарегистрируйся!

Новости

Мы в твиттере!
Мы вконтакте!
Мы на яндексе!

Краснодарское время: 24 Май, 2012, 11:25:02

Страниц: [1] 2 3 ... 5
Печать
Автор Тема: Срачь из темы про goDB  (Прочитано 1304 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Абырвалг    ↓ 
15 Сентябрь, 2010, 02:14:24
НЕ ХУЕТА! ХУЕТА!

PHP Infected, симфоеб, маконенавистник
Группа: Джедаи

Карма: 80
Сообщений: 6096
Сила слова: 1.31

а я вот постепенно отказываюсь от своих либ для работы с базой. Да, это все удобно, но нужно следовать стандартам
Спустя 25 секунд добавил
хотя буду задрачивать доктриновцев что б они добавили некоторые фичи
Записан

PHP does the job since 1995
Пожалуйста, не надо делать двойные клики по ссылкам. Это создает избыточную нагрузку на сервер
artoodetoo    ↓ 
15 Сентябрь, 2010, 02:17:01 , спустя 2 минуты 37 секунд
НЕ ХУЕТА! ХУЕТА!

с особым цинизмом
Группа: в ухо

Карма: 124
Сообщений: 3805
Сила слова: 3.26

что для тебя стандарт?
Записан
kostyl    ↓ 
15 Сентябрь, 2010, 02:26:34 , спустя 9 минут 33 секунды
НЕ ХУЕТА! ХУЕТА!

занедельный антипаттерн
Группа: Джедаи

Карма: 60
Сообщений: 3522
Сила слова: 1.7

я вообще в случае с query($sql, $params)  за query bilder. Для тех кто в такне, что то типа такого:
PHP
<?php
/**
 * @package Query.php
 * @version 1.0
 * @author Konstantin Gerasimov
 * @copyright Copyright (c) 2009, Konstantin Gerasimov
 * @license LGPL
 */

class Query  {
 
  const SELECT = 'Select';
  const INSERT = 'Insert';
  const UPDATE = 'Update';
  const DELETE = 'Delete';
    const ASC = 'ASC';
    const DESC = 'DESC';
    /**
     * @var array
     */

    private $_Tables;
    /**
     * @var array
     */

    private $_Fields;
    /**
     * @var array
     */

    private $_Functions;
    /**
     * @var array
     */

    private $_Values;
    /**
     * @var array
     */

    private $_Joins;
    /**
     * @var array
     */

    private $_Where;
    /**
     * @var array
     */

    private $_Orders;
    /**
     * @var string
     */

    private $_Limit;
    /**
     * @var int
     */

    private $_Type;
    /**
     * @var array
     */

    private $_Binds;
  /**
   * @var string
   */

  private $_Sql;
    /**
     * @param string $QueryType self::SELECT
     */

  public function __construct($QueryType = self::SELECT)
  {
    if (($QueryType !== self::SELECT) &&
        ($QueryType !== self::INSERT) &&
        ($QueryType !== self::UPDATE) &&
        ($QueryType !== self::DELETE)) {
      throw new Exception('Unknown type of Query "' . $QueryType . '"');
    }
        $this->_Type = $QueryType;
        $this->_Tables = array();
        $this->_Values = array();
        $this->_Fields = array();
        $this->_Functions = array();
        $this->_Joins  = array();
        $this->_Where  = array();
        $this->_Orders = array();
        $this->_Limit  = NULL;
        $this->_Binds  = array();
    $this->_Sql = NULL;
  }
    /**
     * @param string $TableName
     * @param string $FieldName
   * @param string $FieldAlias ''
     * @param string $TableAlias ''
     * @return Query
     */

    public function AddField($TableName, $FieldName, $FieldAlias = '', $TableAlias = '')
    {
    $this->_ClearSqlCache();
        if(empty($FieldName) || empty($TableName)) {
            throw new Exception('Empty FeildName ="' . $FieldName . '" or/and TableName="' . $TableName . '"');
        }
        $FieldName = Str::Strtolower($FieldName);
        $TableName = Str::Strtolower($TableName);
    $FieldAlias = Str::Strtolower($FieldAlias);
        $TableAlias = Str::Strtolower($TableAlias);
    $Key = $TableName . '|' . $FieldName . '|' . $FieldAlias . '|' . $TableAlias;
    if (!isset($this->_Fields[$Key])) {
      $this->_Fields[$Key] = array($TableName, $FieldName);
      if (!empty($FieldAlias)) {
        $this->_Fields[$Key][] = $FieldAlias;
        if (!empty($TableAlias)) {
          $this->_Fields[$Key][] = $TableAlias;
        }
      }
    }
        return $this;
    }
  
  public function ClearFields()
  {
    $this->_Fields = array();
  }
  /**
   *
   * @param string $FieldName
   * @param mixed $Value
   * @param string $Format
   * @return Query
   */

  public function AddValue($FieldName, $Value, $Format)
  {
    $this->_ClearSqlCache();
    if (!Db::IsDbFormat($Format)) {
      throw new Exception('Unknown db format "' . $Format . '"');
    }
    $this->_Values[Str::Strtolower($FieldName)] = array($Value, $Format);
    return $this;
  }
    /**
     * @param string $TableName
     * @param string $TableAlias ''
     * @return Query
     */

    public function AddTable($TableName, $TableAlias = '')
    {
    $this->_ClearSqlCache();
        $Key = $TableName . '|' . $TableAlias;
        if (!isset($this->_Tables[$Key])) {
            $this->_Tables[$Key] = $TableName;
      if (!empty($TableAlias)) {
        $this->_Tables[$Key] = array($TableName, $TableAlias);
      }
        }
        return $this;
    }
    /**
     * @param string $WhereString
     * @param array $Binds array()
     * @return Query
     */

    public function AddWhere($WhereString, $Binds = array())
    {
    $this->_ClearSqlCache();
        if (empty($WhereString)) {
            throw new Exception('Empty where string');
        }
        if (!is_array($Binds)) {
            throw new Exception('Binds is not an array');
        }
        $this->_Where[] = array($WhereString, $Binds);
        return $this;
    }
    /**
     * @param string $JoinString
     * @param array $Binds array()
     * @return Query
     */

    public function AddJoin($JoinString, $Binds = array())
    {
    $this->_ClearSqlCache();
        if (empty($JoinString)) {
            throw new Exception('Empty join string');
        }
        if (!is_array($Binds)) {
            throw new Exception('Binds is not an array');
        }
    $Key = $JoinString . md5(serialize($Binds));
    if (!isset($this->_Joins[$Key])) {
      $this->_Joins[$Key] = array($JoinString, $Binds);
    }
        return $this;
    }
    /**
     * @param string $Type
     * @param string $TableName
     * @param string $FieldName
   * @param string $FieldAlias ''
     * @param string $TableAlias ''
     * @return Query
     */

    public function AddOrder($Type, $TableName, $FieldName, $FieldAlias = '', $TableAlias = '')
    {
    $this->_ClearSqlCache();
        if (($Type !== self::ASC) &&
        ($Type !== self::DESC)) {
            throw new Exception('Wrong order type "' . $Type . '"');
        }
    $Key = $TableName . '|' . $FieldName . '|' . $FieldAlias . '|' . $TableAlias . '|' . $Type;
    if (!isset($this->_Orders[$Key])) {
      $this->_Orders[$Key] = array($Type, $TableName, $FieldName);
      if (!empty($FieldAlias)) {
        $this->_Orders[$Key][] = $FieldAlias;
        if (!empty($TableAlias)) {
          $this->_Orders[$Key][] = $TableAlias;
        }
      }
      if (!empty($TableAlias) && empty($FieldAlias)) {
        $this->_Orders[$Key][] = NULL;
        $this->_Orders[$Key][] = $TableAlias;
      }
    }
        return $this;
    }
    /**
     * @param string $FunctionString
     * @param array $Binds
   * @param string $FunctionAlias ''
     * @return Query
     */

    public function AddFunction($FunctionString, $Binds = array(), $FunctionAlias = '')
    {
    $this->_ClearSqlCache();
        if (empty($FunctionString)) {
            throw new Exception('Empty function string');
        }
        if (!is_array($Binds)) {
            throw new Exception('Binds is not an array');
        }
    $Key = $FunctionString . md5(serialize($Binds)) . $FunctionAlias;
    if(!isset($this->_Functions[$Key])) {
      $this->_Functions[$Key] = array($FunctionString, $Binds);
      if (!empty($FunctionAlias)) {
        $this->_Functions[$Key][] = $FunctionAlias;
      }
    }
        return $this;
    }
    /**
     * @param int $Count
     * @param int $From 0
     */

    public function SetLimit($Count, $From = 0)
    {
    $this->_ClearSqlCache();
        if ($Count) {
            $this->_Limit = array($Count, $From);
        }
    }
  /**
   * @return string
   */

  public function GetSQL()
  {
    if (!$this->_Sql) {
      $this->_Sql = $this->{'_Get' . $this->_Type . 'Sql'}();
    }
    return $this->_Sql;
  }
  /**
   * @return array
   */

  public function GetParams()
  {
    return $this->_Binds;
  }
  /**
   * @return string
   */

  public function __toString()
  {
    return htmlspecialchars($this->GetSQL());
  }
  /**
   * @return string
   */

  private function _GetSelectSql()
  {
    $this->_Binds = array();
        $Sql = 'SELECT ' . Str::Strrepeat('?f,', count($this->_Fields));
        foreach ($this->_Fields as $Sign) {
            $this->_Binds[] = $Sign;
        }
        if (count($this->_Functions)) {
            foreach ($this->_Functions as $Sign) {
        $Sql .= $Sign[0] . ',';
                if (count($Sign[1])) {
          foreach ($Sign[1] as $Bind) {
       $this->_Binds[] = $Bind;
          }
                }
            }
        }
        $Sql = Str::Dec($Sql) . ' FROM ';
    $Sql .= Str::Strrepeat('?t,', count($this->_Tables));
        foreach ($this->_Tables as $Sign) {
            $this->_Binds[] = $Sign;
        }
        $Sql = Str::Dec($Sql);
        if (count($this->_Joins)) {
            foreach ($this->_Joins as $Sign) {
                $Sql .= ' ' . $Sign[0] . ' ';
                if (count($Sign[1])) {
          foreach ($Sign[1] as $Bind) {
       $this->_Binds[] = $Bind;
          }
                }
            }
        }
        if (count($this->_Where)) {
            $Sql .= ' WHERE ';
            foreach ($this->_Where as $Sign) {
                $Sql .= ' ' . $Sign[0] . ' ';
                if (count($Sign[1])) {
          foreach ($Sign[1] as $Bind) {
       $this->_Binds[] = $Bind;
          }
                }
            }
        }
        unset($Sign);
        if (count($this->_Orders)) {
            $Sql .= ' ORDER BY ';
            foreach ($this->_Orders as $Sign) {
        $Type = array_shift($Sign);
                $Sql .= ' ?f ' . $Type . ',';
        $this->_Binds[] = $Sign;
            }
            $Sql = Str::Dec($Sql);
        }
        if ($this->_Limit) {
            $Sql .= ' LIMIT ?i OFFSET ?i';
      $this->_Binds[] = $this->_Limit[0];
      $this->_Binds[] = $this->_Limit[1];
        }
        return $Sql;
  }
  /**
   * @return string
   */

  private function _GetInsertSql()
  {
    $this->_Binds = array();
    $Sql = 'INSERT INTO ?t (';
    $this->_Binds[] = array_shift($this->_Tables);
    $Sql .= Str::Strrepeat('?f,', count($this->_Fields), TRUE);
        foreach ($this->_Fields as $Sign) {
            $this->_Binds[] = $Sign;
        }
    $Sql .=  ') VALUES (';
    foreach ($this->_Fields as $Sign) {
      $Sql .= (isset($this->_Values[$Sign[1]]) ? $this->_Values[$Sign[1]][1] : Db::FORMAT_NULL) . ','; //FORMAT
      $this->_Binds[] = (isset($this->_Values[$Sign[1]]) ? $this->_Values[$Sign[1]][0] : NULL); //real value
    }
    $Sql = Str::Dec($Sql) . ')';
    return $Sql;
  }
  /**
   * @return string
   */

  private function _GetUpdateSql()
  {
    $this->_Binds = array();
    $Sql = 'UPDATE ?t SET ';
    $this->_Binds[] = array_shift($this->_Tables);
    foreach ($this->_Fields as $Sign) {
      $Sql .= '?f=' . (isset($this->_Values[$Sign[1]]) ? $this->_Values[$Sign[1]][1]: Db::FORMAT_NULL) . ',';
      $this->_Binds[] = (isset($this->_Values[$Sign[1]]) ? $this->_Values[$Sign[1]][0] : NULL); //real value
    }
    $Sql = Str::Dec($Sql);
        if (count($this->_Where)) {
            $Sql .= ' WHERE ';
            foreach ($this->_Where as $Sign) {
                $Sql .= ' ' . $Sign[0] . ' ';
                if (count($Sign[1])) {
          foreach ($Sign[1] as $Bind) {
       $this->_Binds[] = $Bind;
          }
                }
            }
        }
    return $Sql;
  }
  
  private function _ClearSqlCache()
  {
    $this->_Sql = NULL;
  }
}
А потом типа такого, "где-то в недрах" :
PHP
   $Query = new Query(Query::SELECT);
    $Query->AddTable('user')
      ->AddField('user', 'login')
      ->AddValue('login', 'kostyl', Db::FORMAT_STR); //это вроде для Query::INSERT и UPDATE  так что тут не отработает
    $rs = Db::Query($Query->GetSQL(), $Query->GetParams());
 
Короче типа того. Я думаю так удобнее собирать запросы и параметры.
« Последнее редактирование: 15 Сентябрь, 2010, 02:26:34 от kostyl » Записан

качество жизни обратно пропорционально количеству лени
Абырвалг    ↓ 
15 Сентябрь, 2010, 02:18:32 , спустя
НЕ ХУЕТА! ХУЕТА!

PHP Infected, симфоеб, маконенавистник
Группа: Джедаи

Карма: 80
Сообщений: 6096
Сила слова: 1.31

Doctrine2DBAL на основе PDO который
Записан

PHP does the job since 1995
Пожалуйста, не надо делать двойные клики по ссылкам. Это создает избыточную нагрузку на сервер
phpdude    ↓ 
15 Сентябрь, 2010, 02:23:08 , спустя 4 минуты 36 секунд
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 344
Сообщений: 20790
Сила слова: 1.65

что то типа такого:
ну и хуйня .... код полное дерьмо
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
kostyl    ↓ 
15 Сентябрь, 2010, 02:28:47 , спустя 5 минут 39 секунд
НЕ ХУЕТА! ХУЕТА!

занедельный антипаттерн
Группа: Джедаи

Карма: 60
Сообщений: 3522
Сила слова: 1.7

phpdude, согласен, но дело не в коде, а в паттерне, потому как написать вручную запрос и параметры, который зависит от всяких условий, просто как строку и массив довольно напряжное дело. Эта хрень упрощает жизнь ))
Записан

качество жизни обратно пропорционально количеству лени
phpdude    ↓ 
15 Сентябрь, 2010, 02:31:40 , спустя 2 минуты 53 секунды
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 344
Сообщений: д-о-х-у-я!
Сила слова: 1.65

Эта хрень упрощает жизнь ))
ну это не подход, это жопа!)
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
vasa_c    ↓ 
15 Сентябрь, 2010, 02:36:53 , спустя 5 минут 13 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: в ухо

Карма: 81
Сообщений: 2459
Сила слова: 3.29

Насчёт ORM vs Builder vs native-SQL: кто из них лучше тема для обширного и бессмысленного холивара.
Каждый выбирает, что ему нравится, а после этого выбирает под это библиотеку.
goDB это библиотека для тех, кто выбрал нативный скл.
То что, у неё хуёвые плейсхолдеры или что-то ещё, это к ней, а то что ORM-форева, нет.
Записан

Абырвалг    ↓ 
15 Сентябрь, 2010, 02:40:27 , спустя 3 минуты 34 секунды
НЕ ХУЕТА! ХУЕТА!

PHP Infected, симфоеб, маконенавистник
Группа: Джедаи

Карма: 80
Сообщений: 6096
Сила слова: 1.31

d2 DBAL - это тоже нативный sql если че
Записан

PHP does the job since 1995
Пожалуйста, не надо делать двойные клики по ссылкам. Это создает избыточную нагрузку на сервер
adw0rd    ↓ 
15 Сентябрь, 2010, 02:47:21 , спустя 6 минут 54 секунды
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: в ухо

Карма: не нужна
Сообщений: 17623
Сила слова: 1.67


d2 DBAL - это тоже нативный sql если че
dая еDBAL
Записан

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
kostyl    ↓ 
15 Сентябрь, 2010, 02:47:59 , спустя 38 секунд
НЕ ХУЕТА! ХУЕТА!

занедельный антипаттерн
Группа: Джедаи

Карма: 60
Сообщений: 3522
Сила слова: 1.7

ну это не подход, это жопа!)
я имел в виду паттерн.
vasa_c, да конечно. Я например тоже пишу всё руками там где у меня есть мапперы. А там где у меня актив рекорды - квери билдер ахуенная вещью, как по мне. Ну смотря конечно что и как делать.
А вообще зачет за именованные плейсхолдеры
Записан

качество жизни обратно пропорционально количеству лени
phpdude    ↓ 
15 Сентябрь, 2010, 02:49:30 , спустя 1 минуту 31 секунду
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 344
Сообщений: д-о-х-у-я!
Сила слова: 1.65

я имел в виду паттерн.
а я про него и писал паттерн - Jopa
Спустя 23 секунды добавил
А вообще зачет за именованные плейсхолдеры
у меня всю жизнь {0}, {1}, {2} .. .))
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
artoodetoo    ↓ 
15 Сентябрь, 2010, 02:51:21 , спустя 1 минуту 51 секунду
НЕ ХУЕТА! ХУЕТА!

с особым цинизмом
Группа: в ухо

Карма: 124
Сообщений: 3805
Сила слова: 3.26

засрали тему
Записан
Абырвалг    ↓ 
15 Сентябрь, 2010, 02:55:25 , спустя 4 минуты 4 секунды
НЕ ХУЕТА! ХУЕТА!

PHP Infected, симфоеб, маконенавистник
Группа: Джедаи

Карма: 80
Сообщений: 6096
Сила слова: 1.31

у меня всю жизнь {0}, {1}, {2} .. .))
Java way?
Записан

PHP does the job since 1995
Пожалуйста, не надо делать двойные клики по ссылкам. Это создает избыточную нагрузку на сервер
phpdude    ↓ 
15 Сентябрь, 2010, 02:56:29 , спустя 1 минуту 4 секунды
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 344
Сообщений: 20790
Сила слова: 1.65

Абырвалг, .net => String.Format(string patter, params object);
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
Страниц: [1] 2 3 ... 5
Печать
 

Перейти в:  

Этот топик скрыли: adw0rd, Sinkler, Frozzeg