PHPackages                             krugozor-old/database - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. krugozor-old/database

ActiveLibrary[Database &amp; ORM](/categories/database)

krugozor-old/database
=====================

Database — библиотека PHP классов для простой, удобной, быстрой и безопасной работы с базой данных MySql, использующая расширение PHP mysqli и имитацию подготовленных запросов. Database — is a PHP class library for easy, convenient, fast and safe work with the MySql database, using the PHP mysqli extension and simulating prepared statements.

V2.0(4y ago)026↓100%Apache-2.0PHPPHP &gt;=5.3.0

Since Feb 3Pushed 3y agoCompare

[ Source](https://github.com/Leonid74/Database)[ Packagist](https://packagist.org/packages/krugozor-old/database)[ Docs](https://github.com/Vasiliy-Makogon/Database)[ RSS](/packages/krugozor-old-database/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (1)DependenciesVersions (4)Used By (0)

Получение библиотеки
--------------------

[](#получение-библиотеки)

Вы можете [скачать её архивом](https://github.com/Vasiliy-Makogon/Database/archive/master.zip), клонировать с данного сайта или загрузить через composer ([ссылка на packagist.org](https://packagist.org/packages/krugozor/database)):

```
composer require krugozor/database
```

Изменения
---------

[](#изменения)

v2.0 - 25.02.2021

- Поддержка sleep/wakeup
- Изменены названия методов в классе Statement (старые методы назывались не в CamelCase стиле по историческим причинам)
- Изменено пространство имён

v1.0

- Больше не поддерживается, советую переходить на релиз v2.0

Что такое Database?
-------------------

[](#что-такое-database)

Database — библиотека классов на PHP &gt;= 5.3 для простой, удобной, быстрой и безопасной работы с базой данных MySql, использующая расширение PHP [mysqli](http://php.net/ru/mysqli).

Зачем нужен самописный класс для MySql, если в PHP есть абстракция PDO и расширение mysqli?
-------------------------------------------------------------------------------------------

[](#зачем-нужен-самописный-класс-для-mysql-если-в-php-есть-абстракция-pdo-и-расширение-mysqli)

Основные недостатки всех библиотек для работы с базой в PHP это:

- **Многословность**
    - Что бы предотвратить [SQL-инъекции](http://ru.wikipedia.org/wiki/%D0%92%D0%BD%D0%B5%D0%B4%D1%80%D0%B5%D0%BD%D0%B8%D0%B5_SQL-%D0%BA%D0%BE%D0%B4%D0%B0), у разработчиков есть два пути:
        - Использовать [подготавливаемые запросы](http://php.net/manual/ru/mysqli.quickstart.prepared-statements.php) (prepared statements).
        - Вручную экранировать параметры идущие в тело SQL-запроса. Строковые параметры прогонять через [mysqli\_real\_escape\_string()](http://php.net/manual/ru/mysqli.real-escape-string.php), а ожидаемые числовые параметры приводить к соответствующим типам — `int` и `float`.
    - Оба подхода имеют колоссальные недостатки:
        - Подготавливаемые запросы [ужасно многословны](http://php.net/manual/ru/mysqli.prepare.php#refsect1-mysqli.prepare-examples). Пользоваться "из коробки" абстракцией PDO или расширением mysqli, без агрегирования всех методов для получения данных из СУБД просто невозможно — что бы получить значение из таблицы необходимо написать минимум 5 строк кода! И так на каждый запрос!
        - Экранирование вручную параметров, идущих в тело SQL-запроса — даже не обсуждается. Хороший программист — ленивый программист. Всё должно быть максимально автоматизировано.
- **Невозможность получить SQL запрос для отладки**
    - Что бы понять, почему в программе не работает SQL-запрос, его нужно отладить — найти либо логическую, либо синтаксическую ошибку. Что бы найти ошибку, необходимо "видеть" сам SQL-запрос, на который "ругнулась" база, с подставленными в его тело параметрами. Т.е. иметь сформированный полноценный SQL. Если разработчик использует PDO, с подготавливаемыми запросами, то это сделать... НЕВОЗМОЖНО! Никаких максимально удобных механизмов для этого в родных библиотеках [НЕ ПРЕДУСМОТРЕНО](https://qna.habr.com/q/22669). Остается либо извращаться, либо лезть в лог базы данных.

Решение: Database — класс для работы с MySql
--------------------------------------------

[](#решение-database--класс-для-работы-с-mysql)

1. Избавляет от многословности — вместо 3 и более строк кода для исполнения одного запроса при использовании "родной" библиотеки, вы пишите всего 1.
2. Экранирует все параметры, идущие в тело запроса, согласно указанному типу заполнителей — надежная защита от SQL-инъекций.
3. Не замещает функциональность "родного" mysqli адаптера, а просто дополняет его.

### Чем НЕ является библиотека Database?

[](#чем-не-является-библиотека-database)

Большинство оберток под различные драйверы баз данных являются нагромождением бесполезного кода с отвратительной архитектурой. Их авторы, сами не понимая практической цели своих оберток, превращают их в подобие построителей запросов (sql builder), ActiveRecord библиотек и прочих ORM-решений.

Библиотека Database не является ничем из перечисленных. Это лишь удобный инструмент для работы с обычным SQL в рамках СУБД MySQL — и не более!

Что такое placeholders (заполнители)?
-------------------------------------

[](#что-такое-placeholders-заполнители)

**Placeholders** (англ. — заполнители) — специальные типизированные маркеры, которые пишутся в строке SQL запроса вместо явных значений (параметров запроса). А сами значения передаются "позже", в качестве последующих аргументов основного метода, выполняющего SQL-запрос:

```
