{"id":15579279,"url":"https://github.com/andrey-tech/database-php","last_synced_at":"2026-04-17T01:32:15.561Z","repository":{"id":56948076,"uuid":"284934432","full_name":"andrey-tech/database-php","owner":"andrey-tech","description":"Простая расширяемая библиотека классов на PHP7+ для работы с СУБД (MySQL, SQLite и др.) с кэшированем подготовленных запросов.","archived":false,"fork":false,"pushed_at":"2020-08-04T09:37:59.000Z","size":10,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-06-30T01:42:40.909Z","etag":null,"topics":["database","mysql","pdo","php7","sqlite"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/andrey-tech.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-08-04T09:24:58.000Z","updated_at":"2022-02-12T12:29:22.000Z","dependencies_parsed_at":"2022-08-21T03:10:27.865Z","dependency_job_id":null,"html_url":"https://github.com/andrey-tech/database-php","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/andrey-tech/database-php","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrey-tech%2Fdatabase-php","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrey-tech%2Fdatabase-php/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrey-tech%2Fdatabase-php/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrey-tech%2Fdatabase-php/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andrey-tech","download_url":"https://codeload.github.com/andrey-tech/database-php/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrey-tech%2Fdatabase-php/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31911478,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-16T18:22:33.417Z","status":"ssl_error","status_checked_at":"2026-04-16T18:21:47.142Z","response_time":69,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["database","mysql","pdo","php7","sqlite"],"created_at":"2024-10-02T19:14:20.043Z","updated_at":"2026-04-17T01:32:15.538Z","avatar_url":"https://github.com/andrey-tech.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Database PHP\n\nПростая расширяемая библиотека классов на PHP7+ и PDO для работы с СУБД (MySQL, SQLite и др.) с кэшированием подготовленных запросов.\n\n## Содержание\n\n\u003c!-- MarkdownTOC levels=\"1,2,3,4,5,6\" autoanchor=\"true\" autolink=\"true\" --\u003e\n\n- [Требования](#%D0%A2%D1%80%D0%B5%D0%B1%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)\n- [Установка](#%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0)\n- [Класс `Database`](#%D0%9A%D0%BB%D0%B0%D1%81%D1%81-database)\n    - [Класс `MySQLDatabase`](#%D0%9A%D0%BB%D0%B0%D1%81%D1%81-mysqldatabase)\n        - [Примеры](#%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B)\n    - [Класс `SQLiteDatabase`](#%D0%9A%D0%BB%D0%B0%D1%81%D1%81-sqlitedatabase)\n        - [Примеры](#%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B-1)\n- [Автор](#%D0%90%D0%B2%D1%82%D0%BE%D1%80)\n- [Лицензия](#%D0%9B%D0%B8%D1%86%D0%B5%D0%BD%D0%B7%D0%B8%D1%8F)\n\n\u003c!-- /MarkdownTOC --\u003e\n\n\u003ca id=\"%D0%A2%D1%80%D0%B5%D0%B1%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F\"\u003e\u003c/a\u003e\n## Требования\n\n- PHP \u003e= 7.0.\n- Произвольный автозагрузчик классов, реализующий стандарт [PSR-4](https://www.php-fig.org/psr/psr-4/).\n\n\u003ca id=\"%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0\"\u003e\u003c/a\u003e\n## Установка\n\nУстановка через composer:\n```\n$ composer require andrey-tech/database-php:\"^2.0\"\n```\n\nили добавить\n\n```\n\"andrey-tech/database-php\": \"^2.0\"\n```\n\nв секцию require файла composer.json.\n\n\u003ca id=\"%D0%9A%D0%BB%D0%B0%D1%81%D1%81-database\"\u003e\u003c/a\u003e\n## Класс `Database`\n\nКласс `\\App\\Database\\Database` является абстрактным базовым классом для работы с СУБД.  \nПри возникновении ошибок в классах пространства имен `\\App\\Database` выбрасывается исключение с объектом класса `\\App\\Database\\DatabaseException`.  \n\nКласс `\\App\\Database\\Database` содержит следующие общие публичные методы:\n\n- `static instance(array $config = [], array $options = []) :Database` Возвращает единственный объект класса.\n    + `$config` - конфигурация соединения с СУБД;\n    + `$options` - опции подключения для драйвера СУБД.\n- `connect() :void` Выполняет подключение к серверу СУБД. В обычных условиях не требуется, так как подключение к серверу СУБД выполняется автоматически при первом запросе.\n- `disconnect() :void` Выполняет отключение от сервера СУБД. В обычных условиях не требуется, так как отключение от сервера СУБД выполняется автоматически при уничтожении объекта класса.\n- doStatement($statement, array $values = [], bool $isNamed = true, array $prepareOptions = []): \\PDOStatement  \n    Подготавливает запрос, кэширует подготовленный запрос и запускает подготовленный запрос на выполнение.  \n    Возвращает объект класса \\PDOStatement.\n    + `$statement` - SQL оператор;\n    + `$values` - массив значений для SQL оператора;\n    + `$isNamed` - флаг именованных параметров (:name) в SQL операторе;\n    + `$prepareOptions` - опции драйвера СУБД для подготовки запроса.\n- `beginTransaction()` Инициализирует транзакцию.\n- `commitTransaction()` Фиксирует транзакцию.\n- `rollbackTransaction()` Откатывает транзакцию.\n- `fetchAll(\\PDOStatement $stmt): \\Generator` Позволяет выбирать все записи с помощью генератора.  \n    + `$stmt` - объект класса \\PDOStatement.\n- `getLastInsertId(string $idName = null) :string` Возвращает значение \"id\" последней вставленной записи.\n    + `$idName` - имя столбца \"id\".\n- `createInStatement(array $in = []): string` Возвращает строку для выражения IN (?, ?, ?,...).\n    + `$in` - массив значений внутри выражения IN(?, ?, ?,...).\n- `getPdo() :\\PDO` Возвращает объект класса \\PDO.\n\nДополнительные параметры доступны через публичные свойства объекта класса:\n\nСвойство                | По умолчанию       | Описание\n----------------------- | ------------------ | --------\n`$debug`                | false              | Включает отладочный режим с выводом в STDOUT всех выполняемых операций\n\n\n\u003ca id=\"%D0%9A%D0%BB%D0%B0%D1%81%D1%81-mysqldatabase\"\u003e\u003c/a\u003e\n### Класс `MySQLDatabase`\n\nКласс `\\App\\Database\\MySQLDatabase` расширяет класс `\\App\\Database\\Database` и предназначен для работы с СУБД MySQL.\n\nПо умолчанию установлены следующие параметры конфигурации и опции подключения:\n```php\n$config = [\n    'driver'   =\u003e 'mysql',     // Имя драйвера PDO\n    'host'     =\u003e 'localhost', // Имя или IP хоста\n    'port'     =\u003e 3306,        // Порт\n    'database' =\u003e 'db',        // Имя БД\n    'charset'  =\u003e 'utf8mb4',   // Кодировка\n    'user'     =\u003e '',          // Имя пользователя\n    'password' =\u003e ''           // Пароль пользователя\n];\n\n$options = [\n     PDO::ATTR_TIMEOUT            =\u003e 60,\n     PDO::ATTR_ERRMODE            =\u003e PDO::ERRMODE_EXCEPTION,\n     PDO::ATTR_DEFAULT_FETCH_MODE =\u003e PDO::FETCH_ASSOC\n];    \n```\n\n\u003ca id=\"%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B\"\u003e\u003c/a\u003e\n#### Примеры\n\nПример работы непосредственно с классом `MySQLDatabase`:\n\n```php\nuse App\\Database\\{MySQLDatabase, DatabaseException};\n\ntry {\n\n    $config = [\n        'host'     =\u003e 'localhost',\n        'user'     =\u003e 'test',\n        'password' =\u003e 'pass',\n        'database' =\u003e 'mydb'\n    ];\n\n    $db = MySQLDatabase::instance($config);\n\n    // Включаем отладочный режим с выводом в STDOUT\n    $db-\u003edebug = true;\n\n    // Запрос к таблице contacts без параметров\n    $stmt = $db-\u003edoStatement(\"\n        SELECT COUNT(*) AS `count` \n        FROM `contacts`\n    \");\n    print_r($stmt-\u003efetchAll());\n\n    // Запрос к таблице contacts с использованием именованных параметров\n    $stmt = $db-\u003edoStatement(\"\n        SELECT * \n        FROM `contacts`\n        WHERE `status` = :status\n        LIMIT 10\n    \", [ 'status' =\u003e 1 ]);\n    print_r($stmt-\u003efetchAll());\n\n    // Запрос к таблице contacts с использованием НЕ именованных параметров\n    $stmt = $db-\u003edoStatement(\"\n        SELECT * \n        FROM `contacts`\n        WHERE `status` = ?\n    \", [ 1 ], $isNamed = false);\n\n    // Выбираем все записи с помощью генератора\n    $generator = $db-\u003efetchAll($stmt);\n    foreach ($generator as $row) {\n        print_r($row);\n    }\n\n} catch (DatabaseException $e) {\n    printf('Ошибка (%d): %s' . PHP_EOL, $e-\u003egetCode(), $e-\u003egetMessage());\n}\n```\n\nПример вывода отладочной информации в STDOUT:\n\n```\n***** CONNECT localhost\n***** [1]  SELECT COUNT(*) AS `count` FROM `contacts` \n***** [2]  SELECT * FROM `contacts` WHERE `status` = 1 LIMIT 10 \n***** [3]  SELECT * FROM `contacts` WHERE `status` = 1 \n***** DISCONNECT localhost\n```\n\nПример с созданием дочернего класса:\n\n```php\nuse App\\Database\\{MySQLDatabase, DatabaseException};\n\nclass MyDatabase extends MySQLDatabase\n{\n    /**\n     * Выполняет соединение с CУБД\n     * @return void\n     */\n    public function connect()\n    {\n        parent::connect();\n        $this-\u003etune();\n    }\n\n    /**\n     * Выполняет дополнительную настройку после соединения с СУБД\n     * @return void\n     */\n    public function tune()\n    {\n        // Устанавливаем таймаут неактивности соединения с СУБД\n        $this-\u003edoStatement(\"SET SESSION wait_timeout = {$this-\u003econfig['wait_timeout']}\");\n        // Устанавливаем уровень изолированности транзакций\n        $this-\u003edoStatement('SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED');\n    }\n\n    /**\n     * Извлекает клиентов с заданным статусом\n     * @param int $status ID статуса\n     * @return Generator\n     */\n    public function selectContactsByStatus(int $status) :Generator\n    {\n        $stmt = $this-\u003edoStatement(\"\n            SELECT * \n            FROM `contacts`\n            WHERE `status` = :status\n            FOR UPDATE\n        \", [ 'status' =\u003e $status ]);\n\n        return $this-\u003efetchAll($stmt);\n    }\n}\n\ntry {\n\n    $config = [\n        'host'     =\u003e 'localhost',\n        'user'     =\u003e 'test',\n        'password' =\u003e 'pass',\n        'database' =\u003e 'mydb'\n    ];\n\n    $db = MyDatabase::instance($config);\n\n    // Включаем отладочный режим с выводом в STDOUT\n    $db-\u003edebug = true;\n\n    // Выбираем все записи с помощью генератора\n    $generator = $db-\u003eselectContactsByStatus($status = 1);\n    foreach ($generator as $row) {\n        print_r($row);\n    }\n\n} catch (DatabaseException $e) {\n    printf('Ошибка (%d): %s' . PHP_EOL, $e-\u003egetCode(), $e-\u003egetMessage());\n}\n```\n\n\u003ca id=\"%D0%9A%D0%BB%D0%B0%D1%81%D1%81-sqlitedatabase\"\u003e\u003c/a\u003e\n### Класс `SQLiteDatabase`\n\nКласс `\\App\\Database\\SQliteDatabase` расширяет класс `\\App\\Database\\Database` и предназначен для работы с СУБД SQLite.\n\nПо умолчанию установлены следующие параметры конфигурации и опции подключения:\n```php\n$config = [\n    'driver'   =\u003e 'sqlite',         // Имя драйвера PDO\n    'database' =\u003e 'database.sqlite' // Имя файла SQLite\n];\n\n$options = [\n     PDO::ATTR_TIMEOUT            =\u003e 60,\n     PDO::ATTR_ERRMODE            =\u003e PDO::ERRMODE_EXCEPTION,\n     PDO::ATTR_DEFAULT_FETCH_MODE =\u003e PDO::FETCH_ASSOC\n];    \n```\n\n\u003ca id=\"%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B-1\"\u003e\u003c/a\u003e\n#### Примеры\n\nПример работы непосредственно с классом `SQLiteDatabase`:\n\n```php\nuse App\\Database\\{SQLiteDatabase, DatabaseException};\n\ntry {\n\n    $config = [\n        'database' =\u003e 'db.sqlite',\n    ];\n\n    $db = SQLiteDatabase::instance($config);\n    \n    // Включаем отладочный режим с выводом в STDOUT\n    $db-\u003edebug = true;\n\n    // Запрос к таблице contacts без параметров\n    $stmt = $db-\u003edoStatement(\"\n        SELECT COUNT(*) AS `count`\n        FROM `contacts`\n    \");\n    print_r($stmt-\u003efetchAll());\n\n} catch (DatabaseException $e) {\n    printf('Ошибка (%d): %s' . PHP_EOL, $e-\u003egetCode(), $e-\u003egetMessage());\n}\n```\n\n\u003ca id=\"%D0%90%D0%B2%D1%82%D0%BE%D1%80\"\u003e\u003c/a\u003e\n## Автор\n\n© 2019-2020 andrey-tech\n\n\u003ca id=\"%D0%9B%D0%B8%D1%86%D0%B5%D0%BD%D0%B7%D0%B8%D1%8F\"\u003e\u003c/a\u003e\n## Лицензия\n\nДанная библиотека распространяется на условиях лицензии [MIT](./LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandrey-tech%2Fdatabase-php","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandrey-tech%2Fdatabase-php","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandrey-tech%2Fdatabase-php/lists"}