PHPackages                             andrey-tech/database-php - 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. andrey-tech/database-php

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

andrey-tech/database-php
========================

Простая расширяемая библиотека классов на PHP7+ и PDO для работы с СУБД (MySQL, SQLite и др.) с кэшированием подготовленных запросов

2.0.0(5y ago)29MITPHPPHP &gt;=7.0

Since Aug 4Pushed 5y ago2 watchersCompare

[ Source](https://github.com/andrey-tech/database-php)[ Packagist](https://packagist.org/packages/andrey-tech/database-php)[ Docs](https://github.com/andrey-tech/database-php)[ RSS](/packages/andrey-tech-database-php/feed)WikiDiscussions master Synced 1w ago

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

Database PHP
============

[](#database-php)

Простая расширяемая библиотека классов на PHP7+ и PDO для работы с СУБД (MySQL, SQLite и др.) с кэшированием подготовленных запросов.

Содержание
----------

[](#содержание)

- [Требования](#%D0%A2%D1%80%D0%B5%D0%B1%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)
- [Установка](#%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0)
- [Класс `Database`](#%D0%9A%D0%BB%D0%B0%D1%81%D1%81-database)
    - [Класс `MySQLDatabase`](#%D0%9A%D0%BB%D0%B0%D1%81%D1%81-mysqldatabase)
        - [Примеры](#%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B)
    - [Класс `SQLiteDatabase`](#%D0%9A%D0%BB%D0%B0%D1%81%D1%81-sqlitedatabase)
        - [Примеры](#%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B-1)
- [Автор](#%D0%90%D0%B2%D1%82%D0%BE%D1%80)
- [Лицензия](#%D0%9B%D0%B8%D1%86%D0%B5%D0%BD%D0%B7%D0%B8%D1%8F)

Требования
----------

[](#требования)

- PHP &gt;= 7.0.
- Произвольный автозагрузчик классов, реализующий стандарт [PSR-4](https://www.php-fig.org/psr/psr-4/).

Установка
---------

[](#установка)

Установка через composer:

```
$ composer require andrey-tech/database-php:"^2.0"

```

или добавить

```
"andrey-tech/database-php": "^2.0"

```

в секцию require файла composer.json.

Класс `Database`
----------------

[](#класс-database)

Класс `\App\Database\Database` является абстрактным базовым классом для работы с СУБД.
При возникновении ошибок в классах пространства имен `\App\Database` выбрасывается исключение с объектом класса `\App\Database\DatabaseException`.

Класс `\App\Database\Database` содержит следующие общие публичные методы:

- `static instance(array $config = [], array $options = []) :Database` Возвращает единственный объект класса.
    - `$config` - конфигурация соединения с СУБД;
    - `$options` - опции подключения для драйвера СУБД.
- `connect() :void` Выполняет подключение к серверу СУБД. В обычных условиях не требуется, так как подключение к серверу СУБД выполняется автоматически при первом запросе.
- `disconnect() :void` Выполняет отключение от сервера СУБД. В обычных условиях не требуется, так как отключение от сервера СУБД выполняется автоматически при уничтожении объекта класса.
- doStatement($statement, array $values = \[\], bool $isNamed = true, array $prepareOptions = \[\]): \\PDOStatement
    Подготавливает запрос, кэширует подготовленный запрос и запускает подготовленный запрос на выполнение.
    Возвращает объект класса \\PDOStatement.
    - `$statement` - SQL оператор;
    - `$values` - массив значений для SQL оператора;
    - `$isNamed` - флаг именованных параметров (:name) в SQL операторе;
    - `$prepareOptions` - опции драйвера СУБД для подготовки запроса.
- `beginTransaction()` Инициализирует транзакцию.
- `commitTransaction()` Фиксирует транзакцию.
- `rollbackTransaction()` Откатывает транзакцию.
- `fetchAll(\PDOStatement $stmt): \Generator` Позволяет выбирать все записи с помощью генератора.
    - `$stmt` - объект класса \\PDOStatement.
- `getLastInsertId(string $idName = null) :string` Возвращает значение "id" последней вставленной записи.
    - `$idName` - имя столбца "id".
- `createInStatement(array $in = []): string` Возвращает строку для выражения IN (?, ?, ?,...).
    - `$in` - массив значений внутри выражения IN(?, ?, ?,...).
- `getPdo() :\PDO` Возвращает объект класса \\PDO.

Дополнительные параметры доступны через публичные свойства объекта класса:

СвойствоПо умолчаниюОписание`$debug`falseВключает отладочный режим с выводом в STDOUT всех выполняемых операций

### Класс `MySQLDatabase`

[](#класс-mysqldatabase)

Класс `\App\Database\MySQLDatabase` расширяет класс `\App\Database\Database` и предназначен для работы с СУБД MySQL.

По умолчанию установлены следующие параметры конфигурации и опции подключения:

```
$config = [
    'driver'   => 'mysql',     // Имя драйвера PDO
    'host'     => 'localhost', // Имя или IP хоста
    'port'     => 3306,        // Порт
    'database' => 'db',        // Имя БД
    'charset'  => 'utf8mb4',   // Кодировка
    'user'     => '',          // Имя пользователя
    'password' => ''           // Пароль пользователя
];

$options = [
     PDO::ATTR_TIMEOUT            => 60,
     PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
     PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
];
```

#### Примеры

[](#примеры)

Пример работы непосредственно с классом `MySQLDatabase`:

```
use App\Database\{MySQLDatabase, DatabaseException};

try {

    $config = [
        'host'     => 'localhost',
        'user'     => 'test',
        'password' => 'pass',
        'database' => 'mydb'
    ];

    $db = MySQLDatabase::instance($config);

    // Включаем отладочный режим с выводом в STDOUT
    $db->debug = true;

    // Запрос к таблице contacts без параметров
    $stmt = $db->doStatement("
        SELECT COUNT(*) AS `count`
        FROM `contacts`
    ");
    print_r($stmt->fetchAll());

    // Запрос к таблице contacts с использованием именованных параметров
    $stmt = $db->doStatement("
        SELECT *
        FROM `contacts`
        WHERE `status` = :status
        LIMIT 10
    ", [ 'status' => 1 ]);
    print_r($stmt->fetchAll());

    // Запрос к таблице contacts с использованием НЕ именованных параметров
    $stmt = $db->doStatement("
        SELECT *
        FROM `contacts`
        WHERE `status` = ?
    ", [ 1 ], $isNamed = false);

    // Выбираем все записи с помощью генератора
    $generator = $db->fetchAll($stmt);
    foreach ($generator as $row) {
        print_r($row);
    }

} catch (DatabaseException $e) {
    printf('Ошибка (%d): %s' . PHP_EOL, $e->getCode(), $e->getMessage());
}
```

Пример вывода отладочной информации в STDOUT:

```
***** CONNECT localhost
***** [1]  SELECT COUNT(*) AS `count` FROM `contacts`
***** [2]  SELECT * FROM `contacts` WHERE `status` = 1 LIMIT 10
***** [3]  SELECT * FROM `contacts` WHERE `status` = 1
***** DISCONNECT localhost

```

Пример с созданием дочернего класса:

```
use App\Database\{MySQLDatabase, DatabaseException};

class MyDatabase extends MySQLDatabase
{
    /**
     * Выполняет соединение с CУБД
     * @return void
     */
    public function connect()
    {
        parent::connect();
        $this->tune();
    }

    /**
     * Выполняет дополнительную настройку после соединения с СУБД
     * @return void
     */
    public function tune()
    {
        // Устанавливаем таймаут неактивности соединения с СУБД
        $this->doStatement("SET SESSION wait_timeout = {$this->config['wait_timeout']}");
        // Устанавливаем уровень изолированности транзакций
        $this->doStatement('SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED');
    }

    /**
     * Извлекает клиентов с заданным статусом
     * @param int $status ID статуса
     * @return Generator
     */
    public function selectContactsByStatus(int $status) :Generator
    {
        $stmt = $this->doStatement("
            SELECT *
            FROM `contacts`
            WHERE `status` = :status
            FOR UPDATE
        ", [ 'status' => $status ]);

        return $this->fetchAll($stmt);
    }
}

try {

    $config = [
        'host'     => 'localhost',
        'user'     => 'test',
        'password' => 'pass',
        'database' => 'mydb'
    ];

    $db = MyDatabase::instance($config);

    // Включаем отладочный режим с выводом в STDOUT
    $db->debug = true;

    // Выбираем все записи с помощью генератора
    $generator = $db->selectContactsByStatus($status = 1);
    foreach ($generator as $row) {
        print_r($row);
    }

} catch (DatabaseException $e) {
    printf('Ошибка (%d): %s' . PHP_EOL, $e->getCode(), $e->getMessage());
}
```

### Класс `SQLiteDatabase`

[](#класс-sqlitedatabase)

Класс `\App\Database\SQliteDatabase` расширяет класс `\App\Database\Database` и предназначен для работы с СУБД SQLite.

По умолчанию установлены следующие параметры конфигурации и опции подключения:

```
$config = [
    'driver'   => 'sqlite',         // Имя драйвера PDO
    'database' => 'database.sqlite' // Имя файла SQLite
];

$options = [
     PDO::ATTR_TIMEOUT            => 60,
     PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
     PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
];
```

#### Примеры

[](#примеры-1)

Пример работы непосредственно с классом `SQLiteDatabase`:

```
use App\Database\{SQLiteDatabase, DatabaseException};

try {

    $config = [
        'database' => 'db.sqlite',
    ];

    $db = SQLiteDatabase::instance($config);

    // Включаем отладочный режим с выводом в STDOUT
    $db->debug = true;

    // Запрос к таблице contacts без параметров
    $stmt = $db->doStatement("
        SELECT COUNT(*) AS `count`
        FROM `contacts`
    ");
    print_r($stmt->fetchAll());

} catch (DatabaseException $e) {
    printf('Ошибка (%d): %s' . PHP_EOL, $e->getCode(), $e->getMessage());
}
```

Автор
-----

[](#автор)

© 2019-2020 andrey-tech

Лицензия
--------

[](#лицензия)

Данная библиотека распространяется на условиях лицензии [MIT](./LICENSE).

###  Health Score

23

—

LowBetter than 27% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity7

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity49

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

2114d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/de69f7116b4bbba0435826347eeea01c7c6d831ae5ca5325ccf0686e7ddb92b4?d=identicon)[andrey-tech](/maintainers/andrey-tech)

---

Top Contributors

[![andrey-tech](https://avatars.githubusercontent.com/u/51994444?v=4)](https://github.com/andrey-tech "andrey-tech (1 commits)")

---

Tags

databasemysqlpdophp7sqlitedatabasemysqlsqlitepdo

### Embed Badge

![Health badge](/badges/andrey-tech-database-php/health.svg)

```
[![Health](https://phpackages.com/badges/andrey-tech-database-php/health.svg)](https://phpackages.com/packages/andrey-tech-database-php)
```

###  Alternatives

[doctrine/dbal

Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.

9.7k578.4M5.6k](/packages/doctrine-dbal)[aura/sqlschema

Provides facilities to read table names and table columns from a database using PDO.

41234.1k4](/packages/aura-sqlschema)[delight-im/db

Safe and convenient SQL database access in a driver-agnostic way

49156.8k7](/packages/delight-im-db)[popphp/pop-db

Pop Db Component for Pop PHP Framework

1814.6k11](/packages/popphp-pop-db)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
