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

Статус
В этой теме нельзя размещать новые ответы.
Да, надо описывать..
Вообще, на сайте лежит очень хороший ман.
 
Единственный минус, который я вижу, то, что при изминении таблиц в БД надо править файлы, в которых описаны эти таблицы. Но с другой стороны:
- Строение таблиц у тебя всегда перед глазами
- Описывать модели куда проще
Да и на личие такой штуки как DQL полностью конпенсирует этот недостаток :)
 
  • Заблокирован
  • #45
Ни много, ни мало. Ж)

Код:
<?

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;
	}
}

?>
 
Код:
<?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();
}

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

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

Для просмотра ссылки Войди или Зарегистрируйся
 
А зачем писать то что уже написано? Такое ощущение что тебе «перегруженность» создает проблем.
 
А зачем писать то что уже написано? Такое ощущение что тебе «перегруженность» создает проблем.

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