<?php
/* 
	Appointment: Класс для работы с базой данных
	File: mysql.php
 
*/

if(!defined('MOZG'))
	die('Hacking attempt!');

class db{

	var $db_id = false;
	var $query_num = 0;
	var $query_list = array();
	var $mysql_error = '';
	var $mysql_version = '';
	var $mysql_error_num = 0;
	var $mysql_extend = "MySQLi";
	var $MySQL_time_taken = 0;
	var $query_id = false;

	
	function connect($db_user, $db_pass, $db_name, $db_location = 'localhost', $show_error=1){
		$db_location = explode(":", $db_location);

		if (isset($db_location[1])) {

			$this->db_id = @mysqli_connect($db_location[0], $db_user, $db_pass, $db_name, $db_location[1]);

		} else {

			$this->db_id = @mysqli_connect($db_location[0], $db_user, $db_pass, $db_name);

		}

		if(!$this->db_id) {
			if($show_error == 1) {
				$this->display_error(mysqli_connect_error(), '1');
			} else {
				return false;
			}
		} 

		$this->mysql_version = mysqli_get_server_info($this->db_id);

		if(!defined('COLLATE'))
		{ 
			define ("COLLATE", "cp1251");
		}

		mysqli_query($this->db_id, "SET NAMES '" . COLLATE . "'");

		return true;
	}
	
	function query($query, $show_error=true){
		$time_before = $this->get_real_time();

		if(!$this->db_id) $this->connect(DBUSER, DBPASS, DBNAME, DBHOST);
		
		if(!($this->query_id = mysqli_query($this->db_id, $query) )) {

			$this->mysql_error = mysqli_error($this->db_id);
			$this->mysql_error_num = mysqli_errno($this->db_id);

			if($show_error) {
				$this->display_error($this->mysql_error, $this->mysql_error_num, $query);
			}
		}
			
		$this->MySQL_time_taken += $this->get_real_time() - $time_before;
		
		$this->query_num ++;

		return $this->query_id;
	}
	
	function get_row($query_id = ''){
		if ($query_id == '') $query_id = $this->query_id;

		return mysqli_fetch_assoc($query_id);
	}

	function get_array($query_id = ''){
		if ($query_id == '') $query_id = $this->query_id;

		return mysqli_fetch_array($query_id);
	}
	
	function super_query($query, $multi = false, $cache_prefix = false, $system_cache = false){
		
		//Если включен кеш, то проверяем на его существование
		if($cache_prefix){
		
			if($system_cache)
			
				$data = system_cache($cache_prefix);
				
			else
			
				$data = mozg_cache($cache_prefix);
			
		}
		
		//Если есть ответ с кеша
		if($data){
			
			$unSerData = unserialize($data);
			
			if($unSerData)
			
				return $unSerData;
				
			else
			
				return array();
			
		} else {

			if(!$multi) {

				$this->query($query);
				$data = $this->get_row();
				$this->free();	

				//Если включен кеш, то создаём его
				if($cache_prefix){
				
					$cache_rows = serialize($data);
					
					mozg_create_cache($cache_prefix, $cache_rows);
					
				}
				
				return $data;
				
			} else {
				$this->query($query);
				
				$rows = array();
				while($row = $this->get_row()) {
					$rows[] = $row;
				}

				$this->free();			

				//Если включен кеш, то создаём его
				if($cache_prefix){
				
					$cache_rows = serialize($rows);
					
					if($system_cache)
					
						creat_system_cache($cache_prefix, $cache_rows);
						
					else
					
						mozg_create_cache($cache_prefix, $cache_rows);
				}
				
				return $rows;

			}
		
		}
	}
	
	function num_rows($query_id = ''){
		if ($query_id == '') $query_id = $this->query_id;

		return mysqli_num_rows($query_id);
	}
	
	function insert_id(){
		return mysqli_insert_id($this->db_id);
	}

	function get_result_fields($query_id = '') {
		if ($query_id == '') $query_id = $this->query_id;

		while ($field = mysqli_fetch_field($query_id))
		{
            $fields[] = $field;
		}
		
		return $fields;
   	}

	function safesql( $source ){
		if ($this->db_id) return mysqli_real_escape_string ($this->db_id, $source);
		else return mysql_escape_string($source);
	}

	function free( $query_id = '' ){

		if ($query_id == '') $query_id = $this->query_id;

		@mysqli_free_result($query_id);
	}

	function close(){
		@mysqli_close($this->db_id);
	}

	function get_real_time(){
		list($seconds, $microSeconds) = explode(' ', microtime());
		return ((float)$seconds + (float)$microSeconds);
	}	

	function display_error($error, $error_num, $query = ''){
		if($query) {
			// Safify query
			$query = preg_replace("/([0-9a-f]){32}/", "********************************", $query); // Hides all hashes
			$query_str = "$query";
		}
		
		echo '<?xml version="1.0" encoding="iso-8859-1"?>
		<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
		<html xmlns="http://www.w3.org/1999/xhtml">
		<head>
		<title>Ошибка</title>
		<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
		</head>
		<body>
			<font size="4">Ошибка сервера, попробуйте обновить страницу позже.</font> 
		</body>
		</html>';
		
		exit();
	}

}
?>