На сегодняшний день существует множество статей с готовыми решениями, как работать с СУБД MySQL. Однако, почти в каждой статье приводятся примеры процедурного вызова функций. Начиная с php-версии 5.5.0 расширение MySQL будет удалено из сборки и вообще, это расширение уже устарело. Вместо него будем использовать расширение MySQLi в ООП.
Данная статья является готовым решением для работы с СУБД.
При разработке очередного проекта, я столкнулся с тем, что в каждом методе следующего написанного класса с обращением к СУБД, мне нужно было обращаться к классу работы с СУБД, для очередного select, insert, update и т.п., то есть тягать в функции параметра global с объявленной переменной вне класса. А устанавливать новое соединение с базой — слишком затратно, да и не выгодно, только ресурсы системы тратить. И решил написать переписать класс работы с базой, с сохранением экземпляра класса, чтобы обращаться сразу напрямую к методам класса из любой области видимости переменной.
Для просмотра исходника смотрим под кат.
Для инициализации класса достаточно создать экземпляр класса.
Переменную $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
Репозиторий на github https://github.com/ntvsx193/php-db
Автор: ntvsx193