наши рабочие классы для работы с бд

Тема в разделе ".:: Готовые решения", создана пользователем zaartix, 16 июл 2008.

Статус темы:
Закрыта.
  1. admLoki

    admLoki генератор случайного PHP

    Регистр.:
    14 сен 2006
    Сообщения:
    481
    Симпатии:
    93
    Слушай, у доктрины же насколько я помню надо описывать схему таблицы, или нет?
     
  2. koka

    koka Постоялец

    Регистр.:
    31 дек 2006
    Сообщения:
    94
    Симпатии:
    13
    Да, надо описывать..
    Вообще, на сайте лежит очень хороший ман.
     
  3. admLoki

    admLoki генератор случайного PHP

    Регистр.:
    14 сен 2006
    Сообщения:
    481
    Симпатии:
    93
    Ну тогда это уже не есть хорошо.
     
  4. koka

    koka Постоялец

    Регистр.:
    31 дек 2006
    Сообщения:
    94
    Симпатии:
    13
    Единственный минус, который я вижу, то, что при изминении таблиц в БД надо править файлы, в которых описаны эти таблицы. Но с другой стороны:
    - Строение таблиц у тебя всегда перед глазами
    - Описывать модели куда проще
    Да и на личие такой штуки как DQL полностью конпенсирует этот недостаток :)
     
  5. Гвоздь

    Гвоздь Создатель

    Заблокирован
    Регистр.:
    6 сен 2006
    Сообщения:
    47
    Симпатии:
    34
    Ни много, ни мало. Ж)

    Код:
    <?
    
    class mysql
    {
    	# Соединение с базой данных
    	Function db_connect($mysql_db)
    	{
    		mysql_connect($mysql_db['h'],$mysql_db['un'],$mysql_db['p']) or die("Невозможно создать соеденение с базой!");
    		if(!mysql_select_db($mysql_db['dbn']))
        	{
    			print"Найти базу с таким именем не удалось!";
    		 	die();
    		}
    	}
    	
    	# Разорвать соединение с базой данных
    	Function db_disconnect()
    	{
    		mysql_close();
    	}
    	
    	# Послать запрос базе данных
    	Function q($q)
    	{
    		$res = mysql_query($q) or print"".mysql_error()." (".mysql_errno().")<br>";
    		return $res;
    	}
    }
    
    ?>
     
  6. CrashX

    CrashX В прошлом XSiteCMS

    Регистр.:
    6 июн 2008
    Сообщения:
    682
    Симпатии:
    112
    Код:
    <?php
    if(!defined('_SHELL')) die();
    
    // ************************************************* \\
    // * Class                 |                Module * \\
    // * Version               |                  1.00 * \\
    // * Build:                |                  0001 * \\
    // * Date:                 |            25.08.2008 * \\
    // ************************************************* \\
    //  *              Created by CrashX              *  \\
    //   *            All Rights Reserved            *   \\
    //    *           Copyright © CrashX            *    \\
    //     *      Copyright © eXtreme Studio       *     \\
    //      *   Site: http://eXtreme-Studio.ru    *      \\
    //       *     mail: XSiteCMS@gmail.com      *       \\
    //        ***********************************        \\
    
    /**
    * Класс Баз Данных
    */
    class DB
    {
    // версия класса
    var $version=0.01;
    // таймер для сна
    var $sleep=1;
    // статус и id соединения
    var $connected=false;
    // настройки сервера
    var $server='localhost';
    var $user='root';
    var $password=null;
    var $database=null;
    var $port='3306';
    var $persistent=false;
    // кодовая страница
    var $collate='cp1251';
    // текст запроса
    var $query=null;
    // описание запроса
    var $info=null;
    // время запроса
    var $timer=null;
    // id запроса для освобождения памяти по указателю
    var $id=null;
    // версионность
    var $mysql=null;
    var $compatibility='4.0';
    // статистика
    // ведение журнала
    var $logging=true;
    // освобожднеие памяти после выполнения запроса
    var $free=true;
    var $log=array(array('info'=>'','query'=>'','error'=>'','time'=>''));
    // кол-во запросов
    var $counter = 0;
    
    
    function __construct()
    {
      $this->db();
    }
    
    /**
     * Конфигурация соединения
     *
     */
    function db()
    {
      if(!defined('DB_SERVER')) $this->server='localhost'; else $this->server=DB_SERVER;
      if(!defined('DB_USER')) $this->user='root'; else $this->user=DB_USER;
      if(!defined('DB_PASSWORD')) $this->password=null; else $this->password=DB_PASSWORD;
      if(!defined('DB_PORT')) $this->port=3306; else $this->port=DB_PORT;
    }
    
    /**
     * Подключение к указанной СуБД
     */
    function connect()
    {
    global $engine;
    $this->timer=$engine->debug->dbtime('on');
    if(!$this->connected):
      if($this->port):
        $this->server.=":".$this->port;
      endif;
      if($this->password==""):
        if($this->persistent):
          $this->connected = @mysql_pconnect($this->server,$this->user);
        else:
          $this->connected = @mysql_connect($this->server,$this->user);
        endif;
      else:
        if($this->persistent):
          $this->connected = @mysql_pconnect($this->server,$this->user,$this->password);
        else:
          $this->connected = @mysql_connect($this->server,$this->user,$this->password);
        endif;
      endif;
    endif;
      if($this->connected):
        if($this->database!=""):
        // Выбор базы
          if(!@mysql_select_db($this->database,$this->connected)):
            die("Not select DB ! Не выбрана база данных !");
          endif;
        endif;
      $this->mysql = mysql_get_server_info();
    	if(version_compare($this->mysql_version, $this->compatibility, ">=")):
    	  $this->query="/*!40101 SET NAMES '".$this->collate."' */";
    	else:
          $this->query="SET NAMES '".$this->collate."'";
        endif;
        $this->info="db->connect(".$this->database.")";
        $this->query();
      else:
        die("Not connect server ! Нет соединения с базой данных: <b>".$this->database."</b> !");
      endif;
    }
    
    
    /**
     * Enter description here...
     *
     */
    function disconnect()
    {
    global $engine;
    $this->timer=$engine->debug->dbtime('off');
    if($this->connected):
      $this->free();
      @mysql_close($this->connected);
      $this->connected=null;
      $this->database='';
    endif;
    @mysql_close();
    }
    
    
    /**
    * Выполняет запросы и возвращает указатель на данные
    *
    */
    function query()
    {
    global $engine;
    $this->free ? $this->free() : $this->id=null;
    $this->timer='';
    if($this->query!=""):
      $this->id=mysql_query($this->query,$this->connected);
      $this->counter++;
    else:
      return false;
    endif;
    if($this->logging):
      $this->log();
    endif;
    $this->info=null;
    $this->query=null;
    if(!$this->id):
      $engine->debug->error='DEFAULT';
      $engine->debug->dump();
      return false;
    endif;
    return true;
    }
    
    /**
     * Enter description here...
     */
    function free($id=false)
    {
    if($id):
      @mysql_free_result($id);
    endif;
    if($this->id):
      @mysql_free_result($this->id);
      $this->id=null;
    endif;
    }
    
    /**
     * Ведение журнала запросов текущего пользователя
     */
    function log()
    {
    $this->log[$this->counter-1]['info']=$this->info;
    $this->log[$this->counter-1]['query']=$this->query;
    @$this->log[$this->counter-1]['error']=mysql_errno().':'.mysql_error();
    @$this->log[$this->counter-1]['error']=mysql_errno().':'.mysql_error();
    @$this->log[$this->counter-1]['time']=date('d m Y H:i');
    }
    
     /**
      * Возвращение результата в виде массива
      * @param  MYSQL_ASSOC, MYSQL_NUM, MYSQL_BOTH
      * @return  mixed результат
      */
     function result($type=MYSQL_ASSOC)
     {
     return @mysql_fetch_array($this->id,$type);
    
     }
    
     /**
      * Возвращает количество рядов результата запроса
      * @return  mixed результат
      */
     function rows()
     {
     return @mysql_num_rows($this->id);
     }
    
    
    
    /**
     * Создание текста запроса для выборки записи
     * @param поля в виде ассоциативного массива
     * @param таблица имя
     * @param критерии в виде ассоциативного массива
     * @param доплительные части запроса или директивы
     * @return mixed
     */
    function select($fields=array(),$table=null,$criteria=array(),$directive=null)
    {
    // SELECT *ПОЛЯ* FROM *ТАБЛИЦА* WHERE *УСЛОВИЯ* *ДИРЕКТИВЫ*
    $fields=implode(", ",array_keys($fields));
    if(is_array($criteria)):
      foreach($criteria as $column=>$value):
        $where[]="{$column}='{$value}'";
      endforeach;
      $where=implode(" AND ",$where);
    endif;
    $this->query.="SELECT {$fields} FROM {$table}";
    if(!empty($where)):
      $this->query.=" WHERE {$where}";
    endif;
    $this->query.=" {$directive}";
    return true;
    }
    
    /**
     * Создание текста запроса для добавления записи
     * @param поля в виде ассоциативного массива
     * @param таблица имя
     */
    function insert($fields=array(),$table=null)
    {
    // INSERT INTO *ТАБЛИЦА* SET *ПОЛЯ* WHERE *УСЛОВИЯ*
    foreach($fields as $field):
      $values[]="'{$field}'";
    endforeach;
    $columns=array_keys($fields);
    $this->query.="INSERT INTO {$table} (".implode(", ",$columns).") VALUES (".implode(", ",$values).")";
    return true;
    }
    /**
     * Создание текста запроса для обновления записи
     * @param поля в виде ассоциативного массива
     * @param таблица имя
     * @param критерии в виде ассоциативного массива
     * @return mixed
     */
    function update($fields,$table,$criteria)
    {
    // UPDATE *ТАБЛИЦА* SET *ПОЛЯ* WHERE *УСЛОВИЯ*
    foreach($fields as $column=>$value):
      $updates[]="{$column}='{$value}'";
    endforeach;
    $update=implode(", ",$updates);
    foreach($criteria as $column=>$value):
      $wheres[]="{$column}='{$value}'";
    endforeach;
    $where=implode(" AND ",$wheres);
    $this->query.="UPDATE {$table} SET {$update} WHERE {$where}";
    return true;
    }
    
    /**
     * Создание текста запроса для удаления записи
     * @param таблица имя
     * @param критерии в виде ассоциативного массива
     * @return mixed
     */
    function delete($table,$criteria)
    {
    // DELETE *?!ПОЛЯ!?* FROM *ТАБЛИЦА* WHERE *УСЛОВИЯ*
    foreach($criteria as $column=>$value):
      $wheres[]="{$column}='{$value}'";
    endforeach;
    $where=implode(" AND ",$wheres);
    $this->query.="DELETE FROM {$table} WHERE {$where}";
    return true;
    }
    
    function import($filename)
    {
    
    if(!file_exists($filename)):
      return false;
    endif;
    $fdb = fopen($filename, 'r');
    $sql = '';
    while(!feof($fdb)):
      $sql .=fread($fdb, 1024);
    endwhile;
    fclose($fdb);
    $sql = str_replace("\r", '', $sql);
    $sql = split("\n\n", $sql);
    foreach($sql as $string):
      $this->query=trim($string, "\r\n; ");
      if(ereg('^\#', $this->query))continue;
      // strip out comments and \n for mysql 3.x
      if($this->mysql < $this->compatibility):
        $this->query=preg_replace("~COMMENT.*[^']?'.*[^']?'~","",$this->query);
        $this->query=str_replace('\r', "", $this->query);
        $this->query=str_replace('\n', "", $this->query);
      endif;
    
      $this->info='db->import('.$filename.')';
      $this->query();
    endforeach;
    }
    
    }
    ?>
    
    самописный
    лучше всего его использовать описав таблицу, те указав те поля которе будут фигурировать в модуле например
    Код:
    var $table='organizacia';
    var $org=array(
    'oid'=>false,
    'short_name'=>false,
    'full_name'=>false,
    'tip'=>null,
    'otdelen'=>null,
    'plat_name'=>null,
    'gol_org'=>null,
    'sthet_id'=>null,
    'inn'=>null,
    'kpp'=>null,
    'ogrn'=>null,
    'date_reg'=>null,
    'code_ifns'=>null,
    'name_ifns'=>null,
    'date_svidet'=>null,
    'num_svidet'=>null,
    'code_org_vid_svidet'=>null,
    'code_nalog_organ'=>null,
    'name_nalog_organ'=>null,
    'urid_adres'=>null,
    'fiz_adres'=>null,
    'tel_fiz'=>null,
    'tel_urid'=>null,
    'fax_fiz'=>null,
    'pochta'=>null,
    'uchereditel'=>null,
    'email'=>null,
    'intern'=>null,
    'info'=>null,
    'code_okato'=>null,
    'okpo'=>null,
    'koknh'=>null,
    'code_okopf'=>null,
    'name_okopf'=>null,
    'code_okfs'=>null,
    'name_okfs'=>null,
    'code_okved'=>null,
    'name_okved'=>null,
    'code_inspekc_poluch'=>null,
    'num_pfr'=>null,
    'ter_id'=>null,
    'num_fss'=>null,
    'str_reg'=>null,
    'str_mesto'=>null,
    'kod_nal'=>null,
    'poln_name'=>null,
    'rukovod'=>null,
    'gl_buch'=>null,
    'kassir'=>null,
    );
    
    function select($who=null)
    {
    global $engine;
    $engine->db->select($this->org,$this->table,$who);
    @$engine->db->info.='org->select(ID:'.$who['id'].')';
    if($engine->db->query()) return $this->org=$engine->db->result();
    }
    function insert($who=array())
    {
    global $engine;
    $engine->db->insert($this->org,$this->table);
    @$engine->db->info.='user->select(ID:'.$who['id'].', UL:'.$who['ulogin'].', UP:'.$who['upassword'].')';
    if($engine->db->query()) return $engine->db->result();
    }
    function update($who=array())
    {
    global $engine;
    $engine->db->update($this->org,$this->table,$who);
    @$engine->db->info.='org->update(ID:'.$who['id'].')';
    if($engine->db->query()) return $engine->db->result();
    }
    function delete($who=array())
    {
    global $engine;
    $engine->db->delete($this->table,$who);
    @$engine->db->info.='user->delete(ID:'.$who['id'].')';
    if($engine->db->query()) return $engine->db->result();
    }
    
    проверки на вилд делаются отдельно
     
  7. admLoki

    admLoki генератор случайного PHP

    Регистр.:
    14 сен 2006
    Сообщения:
    481
    Симпатии:
    93
    Май факин год. И ты это используешь?
     
  8. CrashX

    CrashX В прошлом XSiteCMS

    Регистр.:
    6 июн 2008
    Сообщения:
    682
    Симпатии:
    112
    да использую и при том много где, тк FW я не люблю, а этот класс всегда модернизируется и в него добавляются только то что нужно, мне не нужны классы перегруженные функционалом который я вообще не буду использовать!

    вот например в соседней ветке искал решение как работать с DateTime а именно как его преобразовать в любой формат, написал свой обработчик полностью, а сначала с Unix-TimeStamp, но в нем оказалось ограничение что дата должна быть 1970 > тут < 2038
    потом переписал, за основу взял функционал PHP 5.2 впрочем там все написано!))

    DateTime
     
  9. admLoki

    admLoki генератор случайного PHP

    Регистр.:
    14 сен 2006
    Сообщения:
    481
    Симпатии:
    93
    А зачем писать то что уже написано? Такое ощущение что тебе «перегруженность» создает проблем.
     
  10. Jeurey

    Jeurey

    Регистр.:
    13 сен 2006
    Сообщения:
    419
    Симпатии:
    575
    А чо - нет, разве? Кому нужны десять-двадцать "лишних" методов, которые не используешь. Видать, байты на ФС экономят :D
     
Статус темы:
Закрыта.