Установка и требования
Что нужно установить, какое расширение PDO-драйвера включить для вашей базы
данных и единственный класс конфигурации, превращающий учётные данные в живое
соединение CDO.
Требования
- PHP ≥ 8.3
ext-pdo— ядро PDOpsr/log^3.0 — для интерфейса логгера (устанавливается Composer автоматически)
Плюс расширение PDO-драйвера для той базы, к которой вы подключаетесь:
| База данных | Расширение PHP | Что возвращает getDriver() |
|---|---|---|
| PostgreSQL | pdo_pgsql |
pgsql |
| MySQL / MariaDB | pdo_mysql |
mysql |
| Oracle | pdo_oci |
oci |
Проверить, какие драйверы включены:
php -m | grep pdoMySQL против MariaDB
Для обеих используется одно расширение pdo_mysql. CDO различает их во время
выполнения по строке версии сервера, потому что MariaDB поддерживает
INSERT ... RETURNING, а MySQL — нет; см.
Определение драйвера.
Установка
composer require flytachi/winter-cdoПакет автозагружается в пространстве имён Flytachi\\Winter\\Cdo\\ (PSR-4).
Определите класс конфигурации
Класс конфигурации описывает одно соединение. Наследуйте базу для вашей базы
данных и заполните учётные данные внутри setUp() — он вызывается один раз,
сразу после создания объекта.
<?php
namespace App\Db;
use Flytachi\Winter\Cdo\Config\PgDbConfig;
class AppDb extends PgDbConfig
{
public function setUp(): void
{
$this->host = getenv('DB_HOST') ?: 'localhost';
$this->port = (int) (getenv('DB_PORT') ?: 5432);
$this->database = getenv('DB_NAME') ?: 'myapp';
$this->username = getenv('DB_USER') ?: 'postgres';
$this->password = getenv('DB_PASS') ?: '';
}
}Для MySQL/MariaDB наследуйте MySqlDbConfig (порт по умолчанию 3306). Полный
список баз конфигурации, их значений по умолчанию и инлайновых конструкторов
PgDbCall / MySqlDbCall / DbCall — в
Справочнике по конфигурации.
Режим отладки
Задайте переменной окружения DEBUG истинное значение, чтобы открывать
соединения с PDO::ERRMODE_EXCEPTION. CDO и так превращает сбои в
CDOException, поэтому это полезно в основном при разработке.
Получите соединение
ConnectionPool создаёт каждый конфиг один раз за процесс и возвращает живой
CDO:
use Flytachi\Winter\Cdo\ConnectionPool;
use App\Db\AppDb;
$cdo = ConnectionPool::db(AppDb::class);Проверьте, что всё работает
ping() выполняет SELECT 1 и возвращает булево; pingDetail() добавляет
задержку:
$config = ConnectionPool::getConfigDb(AppDb::class);
var_dump($config->ping()); // bool
print_r($config->pingDetail()); // ['status' => bool, 'latency' => float|null, 'error' => string|null]Дальше
- Быстрый старт — первая сквозная связка insert → update → чтение → delete
- Модель работы — как соединяются CDO, Qb и привязки
- Справочник по конфигурации — каждый параметр конфигурации