MySQL и PHP: Класс для создания подключения к базе данных

в 12:37, , рубрики: mysql, php, классы, ооп, Песочница, метки: , , ,

В этой статье сегодня поговорим о создании подключения к базе данных и обсудим какой вариант лучше использовать процедурный или объектно — ориентированный. Для начала давайте разберем на каком уровне мы находимся, если это уровень полного новичка, тогда мой совет без исключения начать использовать процедурный стиль подключения к базе данных. Ранее я писал статью по этой теме на своем блоге, подробнее о процедурном стиле подключения к базе данный читайте в статье: «Как подключиться к MySQL используя PHP». Если за плечами есть уже какой нибудь опыт работы с процедурным стилем подключения к базе данных, тогда Вас наверное как и меня мои проекты просто взяли и заставили использовать объектно — ориентированный подход.

Так или иначе мы сейчас разберем этапы построения класса для создания подключения к базе данных MySQL на языке PHP. Нам понадобиться два PHP файла, в один файл мы «положим» класс для создания подключения к базе данных, а во — втором будем работать с этим классом.

Создадим два файла:

  • index.php;
  • database.class.php;

Думаю, мы не маленькие уже дети и знаем, что нам нужно для работы с PHP файлами. Установленный веб — сервер Apache, PHP, СУБД MySQL и знает куда эти файлы положить — (для тех, кто не знает или забыл).

Файл в котором храниться класс я выношу в отдельный файл и именую его в формате: имя класса.class.php и я знаю, что храниться у меня в этом файле. Когда в проекте много классов, можно потеряться, поэтому рекомендую именовать файлы с классами в формате описанным выше.

Файл database.class.php:

<?php
/*
	Класс создает соединение с базой данных
  */
class DataBase
{
    public static $mConnect;	// Хранит результат соединения с базой данных
    public static $mSelectDB;	// Хранит результат выбора базы данных
}
?>

Давайте сейчас разберем, что было создано на данном шаге. С помощью ключевого слова «class», имени класса — DataBase и фигурный скобок мы создали тело класса. В созданном классе мы создали два свойства, в $mConnect — где храниться результат соединения с базой данных и $mSelectDB — где храниться результат выбора базы данных. Вы могли заметить ключевые слова в каждом свойстве — public и static. О чем они говорят? Public означает, что свойство доступно из вне класса, а static дает возможность обращаться или вызывать свойство без создания экземпляра класс, что очень часто удобно в работе.

Добавим метод Connect() для создания соединения с базой:

<?php
/*
	Класс создает соединение с базой данных
  */
class DataBase
{
    public static $mConnect;	// Хранит результат соединения с базой данных
    public static $mSelectDB;	// Хранит результат выбора базы данных

    // Метод создает соединение с базой данных
    public static function Connect($host, $user, $pass, $name)
	{
		// Пробуем создать соединение с базой данных
		self::$mConnect = mysql_connect($host, $user, $pass);

		// Если подключение не прошло, вывести сообщение об ошибке..
		if(!self::$mConnect)
		{
			echo "<p><b>К сожалению, не удалось подключиться к серверу MySQL</b></p>";
			exit();
			return false;
		}

		// Пробуем выбрать базу данных
		self::$mSelectDB = mysql_select_db($name, self::$mConnect);

		// Если база данных не выбрана, вывести сообщение об ошибке..
		if(!self::$mSelectDB)
		{
			echo "<p><b>".mysql_error()."</b></p>";
			exit();
			return false;
		}

		// Возвращаем результат
		return self::$mConnect;
	}
}
?>

Метод Connect() который мы добавили, его основная задача создать соединение с базой данных, в противном случае сообщить пользователю ошибку. Метод Connect() принимает в качестве параметра:

  • $host — IP адрес сервера, на локальном ПК это localhost;
  • user — имя пользователя базы данных;
  • $pass — пароль пользователя базы данных;
  • $name — имя базы данных к которой подключаемся;

Функция mysql_connect() создает соединение с базой данных, результат выполнения сохраняет в $mConnect. Далее идет проверка конструкцией IF: Если подключение не прошло успешно, вывести сообщение об ошибке… Иначе PHP проигнорирует блок IF и пойдет дальше выбирать базу данных. Функция mysql_select_db() производит выбор имени базы данных, если в базе не существует запрашиваемой база данных, в этом случае программа сообщит пользователю об ошибке. Если все пройдет успешно, соединение с базой данных вернет return.

Добавляем метод Close():


<?php
/*
	Класс создает соединение с базой данных
  */
class DataBase
{
    public static $mConnect;	// Хранит результат соединения с базой данных
    public static $mSelectDB;	// Хранит результат выбора базы данных

    // Метод создает соединение с базой данных
    public static function Connect($host, $user, $pass, $name)
	{
		// Пробуем создать соединение с базой данных
		self::$mConnect = mysql_connect($host, $user, $pass);

		// Если подключение не прошло, вывести сообщение об ошибке..
		if(!self::$mConnect)
		{
			echo "<p><b>К сожалению, не удалось подключиться к серверу MySQL</b></p>";
			exit();
			return false;
		}

		// Пробуем выбрать базу данных
		self::$mSelectDB = mysql_select_db($name, self::$mConnect);

		// Если база данных не выбрана, вывести сообщение об ошибке..
		if(!self::$mSelectDB)
		{
			echo "<p><b>".mysql_error()."</b></p>";
			exit();
			return false;
		}

		// Возвращаем результат
		return self::$mConnect;
	}

    // Метод закрывает соединение с базой данных
	public static function Close()
	{
		// Возвращает результат
		return mysql_close(self::$mConnect);
	}

}
?>

Следующий и уже последний в этом классе метод Close() — закрывает соединение с базой данных, функция mysql_close() закрывает соединение с сервером MySQL и возвращает результат.

Файл index.php:


<?php
// Параметры соединения с базой данных
define('DB_SERVER', 'localhost');       // IP адрес сервера БД или если локальный ПК localhost
define('DB_USERNAME', 'root');         // Имя пользователя
define('DB_PASSWORD', 'password'); // Пароль пользователя
define('DB_DATABASE', 'yats');        // Имя базы данных

// Загружаем соединение с базой данных
require_once 'database.class.php';

// Соединение с базой данных
DataBase::Connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_DATABASE);

// Выполняет запрос к базе данных
$result = mysql_query("SELECT VERSION() AS VERSION");

// Обрабатывает ряд результата запроса и возвращает ассоциативный массив
$row = mysql_fetch_assoc($result);

// Выводит версию сервера MySQL
echo $row['VERSION'];

// Закрываем соединение с базой данных
DataBase::Close();
?>

С помощью функции define() мы создали константы, для хранения параметров соединения с базой данных. Require_once подключает наш класс DataBase в файл index.php.

Давайте вспомним ключевое слово static, которое использовалось в классе DataBase в свойствах и методах данного класса. Это дает нам возможность обращаться к свойствам и методам класса через "::" (два двоеточия). Метод DataBase::Connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_DATABASE), принимает 4 параметра — созданные функцие define() константы, в которых хранится информация о соединения с базой данных. Если соединение пройдет успешно, метод Connect() вернет нам соединение с базой данных. Далее мы сможем работать и выполнять запросы к базе данных. Функция mysql_query() — выполняет запрос к базе данных. Функция mysql_fetch_assoc() — обрабатывает ряд результата запроса и возвращает ассоциативный массив. Конструкция echo выводит версию сервера MySQL. И в завершение метод DataBase::Close() — закроет соединение с базой данных.

Автор: yats

Источник

  1. Чочо Ололоев:

    Не работает )

  2. Артур:

    Спасибо за материал, очень удобный класс.. все заработало.

  3. Андрей:

    спасибо, помогло

  4. Сергей:

    Большое спасибо! Вроде все понятно :) будем использовать! )

  5. Максим:

    Все проделал как описано в статье. Сверял 4 раза, ато и более строчка в строчку.
    Выдает ошибку Fatal error: Call to undefined method DataBase::Connect()

    Подскажите, что делать?

  6. Максим:

    А все поправил. Все нашел. ВСе работает. Причина не внимательность.

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js