Класс php для подключения к mysql базе
Небольшой класс для работы с БД ( PDO )
Внимание! Моё мнение может отличаться от вашего, поэтому хочу сразу сказать, что эта статья не есть истина в последней инстанции и реализация этого класса зависит от программиста и его предпочтений.
Вступление
Начнём с класса DB.
Тут, я думаю, всё понятно, эти вещи можно не объяснять.
Далее большая часть пояснений будет содержаться в коде.
Прекрасно, мы подключились к БД. Теперь нам нужно создать метод, который позволит совершать SQL запросы.
Реализация метода query
Мы готовы к реализации этого метода, но у нас возникает вопрос:
«Что за параметры он принимает и как он должен их использовать?»
Ответ на первый вопрос очевиден:
А что со вторым вопросом?
Всё так же просто, что бы ответить на этот вопрос, мы должны узнать, в каком виде нам подают эти параметры. А получаем мы их вот такими:
Вернёмся к предыдущему вопросу и ответим на него:
Но сначала, мы должны подготовить запрос для подстановки этих значений. В итоге код будет выглядеть так:
Некоторые комментарии немного искажают истину, но при этом кардинально ничего не меняют
Мы имеем уже довольно мощный инструмент, использующий подготовленные запросы и требующий от разработчиков знание SQL, а не тонкостей класса. Но при этом, я бы зашил в этот класс типовые запросы, такие как:
Моя реализация
Эти методы могут быть реализованы по разному, но я представлю свою реализацию.
Здесь эти методы реализованы, возможно не лучшим образом, но реализованы.
Так же сюда можно добавить ещё функции, упрощающие жизнь, но лично мне этого с головой хватает.
Можно добавить следующие методы:
Применение
Мы написали наш класс. Теперь нам нужно протестировать его в реальном «бою».
Давайте попробуем. Для начала нам нужно создать любую таблицу в БД, допустим это будет таблица posts. Добавим туда пару записей и попробуем вывести их с помощью нашего класса.
Это понятно и не требует объяснения, идём дальше. Теперь, давайте попросим БД test вернуть нам значение всех постов при помощи нашего класса.
На выходе мы имеем следующее:
Отлично, а теперь давайте выведем только первый пост.
Прекрасно. Ну и в конце добавим запись и выведем данные до и после.
После
Мы получили то, что хотели и убедились в том, что этот класс рабочий.
В заключении
Ссылка на github: class DB
Класс для работы с базой данных MySQL
Существует очень большое количество различных техник создания веб-ресурсов, начиная от простого структурного и заканчивая сложной объектно-ориентированной системой. Каждый подход имеет свои плюсы и минусы. Необходимо найти правильную структуру для определенного приложения, основываясь на его потребностях. Например, для маленького сайта визитки подойдет простой структурный тип программирования, для крупного проекта, конечно, необходимо продумать уже более сильный подход, основанный на использовании объектов.
В данной теме опишем класс для работы с базой данных MySQL, с помощью которого можно легко управлять сохраненными данными, добавлять, удалять или редактировать информацию. Разобравшись с работой данного класса, его можно использовать практически для всех веб-приложений, он сможет служить сердцем любого скрипта.
Конфигурационные настройки класса
Для работы данного класса необходимо иметь конфигурационные настройки, которые касаются непосредственно сервера баз данных:
Опишем основные константы:
— DBHOST содержит имя сервера MySQL;
— DBNAME содержит имя базы данных;
— DBUSER содержит имя пользователя;
— DBPASS содержит пароль пользователя базы данных;
— COLLATE кодировка по-умолчанию.
Далее опишем функции класса.
Свойства объекта класса MySQLi
— Переменная $db_object будет хранить открытое соединение с базой данных. По умолчанию значение False.
— В переменной $query_num будет хранится число выполненных запросов к базе данных. Это полезно для оптимизации скрипта и определения нагрузки. По умолчанию равна 0.
— Массив $query_list будет хранить список запросов, их время выполнения и сам запрос. Данная переменная служит исключительно для наладочных целей, поэтому ее использование будет оправдано только при работе администратора сайта.
— В переменной $mysql_version будет хранится версия сервера базы данных MySQL. Эти данные будут интересны, например, при тестировании скорости работы различных версий.
— Переменная $MySQL_time_taken будет сохранять общее время, которое тратится на запросы к базе данных. По умолчанию равна 0.
— Переменная $query_object сохраняет значение выполнения запроса к базе данных.
Далее будут следовать необходимые функции, и начнем с функции определения реального времени:
Подключение к базе данных MySQL
Следующим этапом будет функция подключения к базе данных:
Данная функция принимает в качестве параметров имя пользователя, пароль, имя базы данных и хоста.
В зависимости от наличия порта в имени хоста, будет выполнен один из двух вариантов подключения.
Если подключение завершится ошибкой, тогда сработает функция Display_error, которая будет описана далее.
В переменную Mysql_version будет записано значение версии базы данных:
И последнее, что делает данная функция, это устанавливает необходимую кодировку для работы:
Функция выполнения запроса MySQL
Далее следует функция выполнения запроса к базе данных.
Именно данная функция будет выполнять основные действия с базой данных: добавление, удаление, редактирование информации.
Сначала функция записывает в переменную $time_before реальное время начала работы функции:
Далее выполняет подключение к базе данных, если оно не установлено предыдущим вызовом данной функции.
Далее функция выполняет запрос, и в случае его завершения с ошибкой, выдает сообщение об этом:
Далее функция рассчитывает время выполнения запроса, и добавляет его к уже существующему. Переменная MySQL_time_taken будет сохранять общее время выполнения всех запросов:
Далее заполняем массив $query_list, который будет хранить список запросов, их время выполнения и сам запрос.
Последнее действия функции является подсчет количества всех запросов и возвращения результата выполнения:
Функция возврата автоматически генерируемого ID
Далее следует функция возврата автоматически генерируемого ID, используя последний запрос.
Данная функция может пригодится записывая уникальное значение идентификатора ID пользователя при регистрации, то есть при добавлении данных в базу данных.
Функция Mysqli_insert_id возвращает ID, генерируемый запросом к таблице, которая содержит колонку с атрибутом AUTO_INCREMENT.
Извлечение результирующего ряда в виде ассоциативного массива
Следующей функцией будет функция извлечения результирующего ряда в виде ассоциативного массива.
Возвращает ассоциативный массив, соответствующий результирующей выборке или NULL, если других рядов не существует.
Если в параметре пустая строка, тогда будет возвращен массив последнего запроса к базе данных, иначе запрос, который содержится в параметре функции.
Освобождение памяти занятой результатам запроса
Опишем функцию освобождения памяти занятой результатам запроса:
Если в параметре пустая строка, тогда будет освобождена память последнего запроса к базе данных, иначе запрос, который содержится в параметре функции.
Функция мультизапроса
Опишем функцию, которая выполняет мультизапит к базе данных:
Данная функция принимает в качестве параметра запрос к базе данных. Второй аргумент функции является логический тип, который по умолчанию принимает значение False.
Получаем число строк, полученных предыдущей операцией
Опишем процедуру получения числа строк, затронутых предыдущей операцией запроса к базе данных:
Данная функция возвращает число строк, полученных в последних INSERT, UPDATE, REPLACE или DELETE запросах.
Результатом работы функции является целое число. Если оно большее нуля, значит одна из вышеописанных операция закончилась успешно. Ноль означает, что запросу вида UPDATE не обновлен ни одной записи, или ни один строка не соответствует условию WHERE в запросе, или запрос еще не был выполнен.
Получаем число рядов в результирующей выборке
Рассмотрим функцию получения числа рядов в результирующей выборке:
Если параметр пустая строка, тогда будет возвращен массив последнего запроса к базе данных, иначе запрос, который содержится в параметре функции.
Выборка одной строки из результирующего набора
Далее следует функция выборки одной строки из результирующего набора и добавление ее в ассоциативный массив.
Если параметр пустая строка, тогда будет возвращен массив последнего запроса к базе данных, иначе запрос, который содержится в параметре функции.
Функция экранирование спецсимволов в строке
Еще одна функция данного класса является функция экранирования спецсимволов в строке:
Данная функция возвращает строку, в которой перед каждым спецсимволов добавлен обратный слэш (\), для дальнейшего использования этой строки в запросе к базе данных. Экранируются одиночные кавычки (‘), двойные кавычки («), обратный слеш (\) и NUL (байт NULL).
Закрытие ранее открытого соединения с базой данных
Функция Close класса для работы с базой данных закрывает ранее открытое соединение с базой данных.
Функция вывода ошибок
Далее следует функция вывода ошибок, благодаря которой можно четко обнаружить местоположение ошибки:
Сначала обрабатываем вывод ошибок, а именно преобразуем специальные символы в HTML-сущности:
Далее запускаем функцию Debug_backtrace, которая возвращает массив вложенных ассоциативных массивов:
Поскольку вызов функции Query содержится в функции Super_query, содержание массивов будет всегда строго по порядку:
Благодаря данной функции, мы точно узнаем имя файла, номер строки с ошибкой, номер самой ошибки с текстовым представлением и запрос, который содержит ошибку.
Ну вот и подошел к концу класс для работы с базой данных MySQL.
Опишем основные возможности класса и их реализацию.
Результат выполнения:
Третий вариант:
‘;
Результат:
Проверка существования уникальной записи:
Проверка существования нескольких подходящих записей:
Обновить ячейку в таблице если значения поля совпадает с условием. Данное выражение очень часто используются в программировании:
Можно создать функцию для вывода информации для администратора:
‘;
echo ‘ALL Times: ‘.$db->MySQL_time_taken.’
‘;
echo ‘ALL Query: ‘.$db->query_num.’
‘;
echo ‘ALL Memory: ‘.get_size(memory_get_usage()).’
‘;
echo ‘
MySQL и PHP: Класс для создания подключения к базе данных
В этой статье сегодня поговорим о создании подключения к базе данных и обсудим какой вариант лучше использовать процедурный или объектно — ориентированный. Для начала давайте разберем на каком уровне мы находимся, если это уровень полного новичка, тогда мой совет без исключения начать использовать процедурный стиль подключения к базе данных. Ранее я писал статью по этой теме на своем блоге, подробнее о процедурном стиле подключения к базе данный читайте в статье: «Как подключиться к MySQL используя PHP». Если за плечами есть уже какой нибудь опыт работы с процедурным стилем подключения к базе данных, тогда Вас наверное как и меня мои проекты просто взяли и заставили использовать объектно — ориентированный подход.
Так или иначе мы сейчас разберем этапы построения класса для создания подключения к базе данных MySQL на языке PHP. Нам понадобиться два PHP файла, в один файл мы «положим» класс для создания подключения к базе данных, а во — втором будем работать с этим классом.
Думаю, мы не маленькие уже дети и знаем, что нам нужно для работы с PHP файлами. Установленный веб — сервер Apache, PHP, СУБД MySQL и знает куда эти файлы положить — (для тех, кто не знает или забыл).
Файл в котором храниться класс я выношу в отдельный файл и именую его в формате: имя класса.class.php и я знаю, что храниться у меня в этом файле. Когда в проекте много классов, можно потеряться, поэтому рекомендую именовать файлы с классами в формате описанным выше.
Добавим метод Connect() для создания соединения с базой:
Добавляем метод Close():
Следующий и уже последний в этом классе метод Close() — закрывает соединение с базой данных, функция mysql_close() закрывает соединение с сервером MySQL и возвращает результат.
С помощью функции 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() — закроет соединение с базой данных.
Класс для работы с базой данных
Привожу свой прокомментированный класс для работы с базой данных:
mysqli = new mysqli(«localhost», «root», «», «my_db»);
$this->mysqli->query(«SET lc_time_names = ‘ru_RU'»);
$this->mysqli->query(«SET NAMES ‘utf8′»);
>
Как видите, нет ничего лишнего, только всё самое необходимое. Теперь разберём PHP-код, который использует данный класс:
Вот такой незамысловатый класс для работы с базой данных я использую в своих проектах.
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Комментарии ( 21 ):
Интересный метод getQuery(), напоминает параметризованные запросы prepare(), bind_param(). Как по вашему, стоит ли заморачиваться с ними или для безопасности вполне хватит вашего подхода для подстановки значений в запрос?
Лично я их не использую и особого смысла не вижу.
Михаил, возникла проблема. Все методы работают кроме select и selectRow. Не знаю в чем проблема, никаких ошибок не выводит но и то, что нужно тоже 🙁 Я в отчаянии.
Скорее всего, ошибка в Вашем запросе. Используйте этот метод для поиска ошибок: http://myrusakov.ru/php-finderror.html и для поиска ошибки в SQL: http://myrusakov.ru/sql-finderror.html
Он Array и должен возвращать. Это же массив данных.
Михаил, спасибо БОЛЬШОЕ Вам за это курс, подскажите, пожалуста, нет ли в отправке формы в БД каких-либо особенностей при отправке значений радиокнопок? У меня есть форма отзыва о компании, в которой есть 2 текстовых поля и 2 поля с радиокнопками. Значения полей с текстом в БД попадает, а выбранное значение радиокнопок-нет. просто пустая ячейка. Хотя через echo на странице оно выводиться?
Никаких особенностей нет, надо просто искать ошибку: http://myrusakov.ru/php-finderror.html
Спасибо за класс, удобно. Прошу показать пример работы с insert и update
Мне больше вот этот нравится, не знаю, дает он 100% защиту от sql инъекция, но хотя бы какая то. http://habrahabr.ru/post/165069/
Дякую за посилання.. дуже зручно і безпечно.
Не получается подключиться к базе данных. Куда класть этот файл класса БД?
В папку положите корневую.
Сделал! Сделал! Оказывается в файле класса БД не надо было прописывать данные БД (логин пароль и пр.)!
Добавить этот весь код надо в один файл? У меня database_class.php
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Copyright © 2010-2021 Русаков Михаил Юрьевич. Все права защищены.
3 способа подключения к MySQL с помощью PHP с примерами кода
Главное меню » Базы данных » База данных MySQL » 3 способа подключения к MySQL с помощью PHP с примерами кода
В этом руководстве описывается следующие три метода вместе с соответствующей программой примера на PHP, которая объяснит, как подключиться с помощью PHP к базе данных MySQL.
Для этого необходимо установить пакет PHP-MySQL.
На основе дистрибутива RedHat включая CentOS, использовать yum для установки PHP-MySQL, как показано ниже.
В зависимости от вашей системы, выше будем устанавливать или обновлять следующие зависимости:
После того, как все установлено, страница phpinfo будет отображать MySQL модуль, как показано ниже:
Для всех приведенных ниже примеров, мы будем подключаться к базе данных MySQL, которая уже существует. Если вы новичок в MySQL, это хорошее место, чтобы начать: MySQL – Руководство для начинающих.
Примечание: Все, что описано здесь также будет работать с MariaDB, как это работает на MySQL.
1. Подключение на PHP с использованием расширения Mysqli
MySQLi означает MySQL Improved.
Обратите внимание, что в большинстве дистрибутивов (например: CentOS), PHP-MySQLi уже является частью пакета PHP-MySQL. Таким образом, вам не придется искать и устанавливать пакет PHP-MySQLi. Все, что вам нужно сделать, это установить пакет PHP-MySQL, чтобы получить работающее расширение Mysqli на вашей системе.
Создайте следующий файл mysqli.php в DocumentRoot вApache:
В приведенном выше:
При вызове mysqli.php из вашего браузера, вы увидите следующий вывод, что свидетельствует о том, что PHP был в состоянии подключиться к базе данных MySQL и сделать выборку данных.
Примечание: Если вы пытаетесь подключиться к удаленной базе данных MySQL, то вы можете сделать это, чтобы избежать ошибки запрета подключения к хосту: Как разрешить клиенту MySQL подключиться к удаленному серверу MySQL.
2. Подключение при помощи PHP к MySQL с расширением PDO
PDO означает PHP Data Objects.
PDO_MYSQL реализует интерфейс PDO, предоставляемый РНР для подключения программы к базе данных MySQL.
В большинстве дистрибутивов Linux (например, CentOS и RedHat), PHP-PDO пакет уже входит в пакет PHP-MySQL. Таким образом, вам не придется искать и устанавливать пакет PHP-PDO. Все, что вам нужно сделать, это установить пакет PHP-MySQL, чтобы получить работающее расширение PDO_MYSQL PHP в вашей системе.
Создайте следующий файл MySQL-pdo.php в вашим Apache DocumentRoot:
В приведенном выше:
При вызове mysqli.php из вашего браузера, вы увидите следующий вывод, что свидетельствует о том, что PHP был в состоянии подключиться к базе данных MySQL и сделать выборку данных.
3. Подключение на PHP с использованием функций mysql_ (устар)
Используйте этот метод, только если вы используете более старую версию PHP и не можете обновить ее до новой версии по какой-то причине.
Рекомендуется использовать метод #2 и #3, показанный выше, вместо этого метода. Я включил этот метод только для справки, а не как рекомендация к использованию.
Это устаревшее расширение PHP 5.5 версии. Но начиная с PHP 7.0 версии, это не будет работать, так как она была удалена.
Начиная с PHP 5.5 версии, когда вы используете эти функции, они будет генерировать ошибку E_DEPRECATED.
Создайте следующий файл MySQL-legacy.php под Apache DocumentRoot:
В приведенном выше:
При вызове MySQL-legacy.php из вашего браузера, вы увидите следующий вывод, что свидетельствует о том, что PHP был в состоянии подключиться к базе данных MySQL и сделать выборку данных.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.