<?php
class DBL
{
	public static $dsn = '';
	public static $user = '';
	public static $pass = '';
	public static $dbName = '';
	public static $type = '';

	public static $path = '';

	public static $db = '';
	/**
	 * Объект PDO.
	 */
	public static $dbh = null;

	/**
	 * Statement Handle.
	 */
	public static $sth = null;

	/**
	 * Выполняемый SQL запрос.
	 */
	public static $query = '';

	/**
	 * Подключение к БД.
	 *                 $this -> conn = new PDO( 'sqlite:' . $_SERVER['DOCUMENT_ROOT'] . '/bd/'. $bd );
	 */
	public static function getDbh()
	{




		// echo "lite";

		

			

			self::$dbh = new PDO('sqlite:' . self::$db);
			echo self::$dsn;
			//Делаем бекап БД
			//if (!file_exists('bd/' . date("Y-m-d") . '_' . $dbname . '.zip'))
			//	exec('zip bd/' . date("Y-m-d") . '_' . $dbname . '.zip bd/' . $dbname . '.db 9 &');
			self::$dbh->exec('PRAGMA journal_mode=WAL;');
		



		return self::$dbh;
	}

	/**
	 * Закрытие соединения.
	 */
	public static function destroy()
	{
		self::$dbh = null;
		return self::$dbh;
	}

	/**
	 * Получение ошибки запроса.
	 */
	public static function getError()
	{
		$info = self::$sth->errorInfo();
		return (isset($info[2])) ? 'SQL: ' . $info[2] : null;
	}

	/**
	 * Возвращает структуру таблицы в виде ассоциативного массива.
	 */
	public static function getStructure($table)
	{
		$res = array();
		foreach (self::getAll("SHOW COLUMNS FROM {$table}") as $row) {
			$res[$row['Field']] = (is_null($row['Default'])) ? '' : $row['Default'];
		}
		return $res;
	}

	/**
	 * Добавление в таблицу, в случаи успеха вернет вставленный ID, иначе 0.
	 */
	public static function add($query, $param = array())
	{
		self::$sth = self::getDbh()->prepare($query);
		return (self::$sth->execute((array) $param)) ? self::getDbh()->lastInsertId() : 0;
	}

	/**
	 * Выполнение запроса.
	 */
	public static function set($query, $param = array())
	{
		self::$sth = self::getDbh()->prepare($query);
		return self::$sth->execute((array) $param);
	}


	/**
	 * Получение строки из таблицы.
	 */
	public static function getRow($query, $param = array())
	{
		self::$sth = self::getDbh()->prepare($query);
		self::$sth->execute((array) $param);
		return self::$sth->fetch(PDO::FETCH_ASSOC);
	}

	/**
	 * Получение всех строк из таблицы.
	 */
	public static function getAll($query, $param = array())
	{
		self::$sth = self::getDbh()->prepare($query);
		self::$sth->execute((array) $param);
		return self::$sth->fetchAll(PDO::FETCH_ASSOC);
	}

	/**
	 * Получение значения.
	 */
	public static function getValue($query, $param = array(), $default = null)
	{
		$result = self::getRow($query, $param);
		if (!empty($result)) {
			$result = array_shift($result);
		}
		return (empty($result)) ? $default : $result;
	}

	/**
	 * Получение столбца таблицы.
	 */
	public static function getColumn($query, $param = array())
	{
		self::$sth = self::getDbh()->prepare($query);
		self::$sth->execute((array) $param);
		return self::$sth->fetchAll(PDO::FETCH_COLUMN);
	}



	public static function alterTable($query, $param = array())
	{
		self::$sth = self::getDbh()->prepare($query);
		self::$dbh->query($query);
	}
}

?>