- PVSM.RU - https://www.pvsm.ru -

PHP Class MySQLi — СУБД MySQL

На сегодняшний день существует множество статей с готовыми решениями, как работать с СУБД MySQL. Однако, почти в каждой статье приводятся примеры процедурного вызова функций. Начиная с php-версии 5.5.0 расширение MySQL будет удалено [1] из сборки и вообще, это расширение уже устарело. Вместо него будем использовать расширение MySQLi в ООП [2].
Данная статья является готовым решением для работы с СУБД.

При разработке очередного проекта, я столкнулся с тем, что в каждом методе следующего написанного класса с обращением к СУБД, мне нужно было обращаться к классу работы с СУБД, для очередного select, insert, update и т.п., то есть тягать в функции параметра global с объявленной переменной вне класса. А устанавливать новое соединение с базой — слишком затратно, да и не выгодно, только ресурсы системы тратить. И решил написать переписать класс работы с базой, с сохранением экземпляра класса, чтобы обращаться сразу напрямую к методам класса из любой области видимости переменной [3].

Для просмотра исходника смотрим под кат.

Для инициализации класса достаточно создать экземпляр класса.
Переменную $db не следует удалять после объявления, т.к. ее адрес используется для дальнейшей работы со статическими методами класса.

<?php

	include 'DB.class.php';

	try {
		$db = new DB('localhost:3306', 'user', 'password', 'dbname');
	} catch (Exception $e) {
		exit($e->getMessage());
	}

?>

Ниже приведу содержимое класса DB.class.php

<?php

<?php
class DB {

	private static $db 		= false;
	private static $mysqli 	= false;

	function DB($address, $user, $password, $dbname) {
		self::$db = &$this;
		list($host, $port) = explode(':', $address);

		$mysqli = new mysqli($host, $user, $password, $dbname, $port, $socket);

		if ($mysqli->connect_error)
			throw new Exception("Connect failed: %s", $mysqli->connect_error);

		self::$mysqli = &$mysqli;
		self::$mysqli->query('SET NAMES utf8 COLLATE utf8_general_ci');
	}
	
	public static function GetRows($rows, $single = false) {
		$result = array();

		if ($rows === false)
			return $result;

		if ($single) 
			return $rows->fetch_assoc();

		while ($row = $rows->fetch_assoc())
			array_push($result, $row);

		$rows->free();
		return $result;
	}

	public static function Select($sql, $single = false) {
		$result = self::$mysqli->query($sql);
		return self::$db->GetRows($result, $single);
	}
	
	public static function Update($data, $table, $where) {
		$sets = '';
		foreach ($data as $column => $value) {
			$sets .= $sets ? ', ' : '';
			$sets .= "`$column` = '$value'";			
		}
		$sql = "UPDATE $table SET $sets WHERE $where";
		self::$mysqli->query($sql);
	}
	
	public static function Insert($data, $table) {
		$columns 	= "";
		$values 	= "";
		foreach ($data as $column => $value) {
			$columns 	.= $columns ? ', ' : '';
			$columns 	.= "`$column`";
			$values 	.= $values 	? ', ' : '';
			$values 	.= "'$value'";
		}
		$sql = "INSERT INTO $table ($columns) VALUES ($values)";
		self::$mysqli->query($sql);
		return self::$mysqli->insert_id;
	}
	
	public static function CountRows($table, $request = false) {
		$sql = "SELECT COUNT(*) FROM $table ";
		$sql .= $request ? $request : '';
		$result = self::$mysqli->query($sql);
		$count = $result->fetch_array();
		$result->free();
		return $count[0];

	}

	public static function Query($sql) {
		return self::$mysqli->query($sql);
	}
	
	public static function Delete($table, $where) {
		$sql = "DELETE FROM $table WHERE $where";
		self::$mysqli->query($sql);
	}

	public static function Close() {
		self::$mysqli->close();
	}

	function __destruct() {
		self::$db->Close();
	}

}

?>

Подробнее о методах MySQLi на http://www.php.net/mysqli [4]
Репозиторий на github https://github.com/ntvsx193/php-db [5]

Автор: ntvsx193

Источник [6]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/pesochnitsa/27119

Ссылки в тексте:

[1] удалено: http://www.php.net/manual/ru/faq.databases.php#faq.databases.mysql.deprecated

[2] ООП: http://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5

[3] области видимости переменной: http://php.net/manual/ru/language.variables.scope.php

[4] http://www.php.net/mysqli: http://www.php.net/mysqli

[5] https://github.com/ntvsx193/php-db: https://github.com/ntvsx193/php-db

[6] Источник: http://habrahabr.ru/post/169397/