API CDO
CDO extends PDO, добавляя методы DML ниже. Всё остальное — query, prepare,
fetch*, транзакции, атрибуты — унаследовано от PDO без изменений. Каждый метод
здесь бросает CDOException при сбое, оборачивая
исходный PDOException.
Идентификаторы квотируются, значения привязываются
Значения привязываются как параметры подготовленного запроса. Имена таблиц и
колонок — которые привязать нельзя — квотируются символами кавычек драйвера
("…" для PostgreSQL/Oracle, `…` для MySQL/MariaDB), поэтому эти методы DML
безопасны даже с динамически собранными именами. Поскольку квотированные
идентификаторы в PostgreSQL регистрозависимы, передавайте имена ровно так, как
они существуют в схеме (users, а не Users). Это квотирование действует только в
методах CDO — имена колонок, переданные в Qb,
не квотируются.
Создание
Вы редко создаёте CDO напрямую — за вас это делает
ConnectionPool. Конструктор:
public function __construct(
DbConfigInterface $config,
int $timeout = 5,
bool $debug = false
)| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
config |
DbConfigInterface |
— | Конфиг соединения (учётные данные, драйвер, логгер) |
timeout |
int |
5 |
Тайм-аут соединения в секундах (PDO::ATTR_TIMEOUT) |
debug |
bool |
false |
При true устанавливает PDO::ERRMODE_EXCEPTION |
getDriverName
public function getDriverName(): stringВозвращает нормализованный драйвер: 'pgsql', 'mysql', 'mariadb' или
'oci'. В отличие от PDO::ATTR_DRIVER_NAME, различает MariaDB и MySQL — см.
Определение драйвера.
insert
final public function insert(string $table, object|array $entity): mixedВставляет одну строку и возвращает сгенерированный первичный ключ.
| Параметр | Тип | Описание |
|---|---|---|
table |
string |
Имя таблицы |
entity |
`object\ | array` |
- Возвращает первичный ключ — значение первого ключа сущности,
прочитанное через
RETURNING(PostgreSQL/MariaDB) илиlastInsertId()(MySQL). Возвращаетnull, когда нет сгенерированного id для сообщения. - Значения
nullвentityисключаются изINSERT. - Бросает
CDOExceptionпри сбое запроса.
insertGroup
final public function insertGroup(
string $table,
array $entities,
int $chunkSize = 1000
): voidПакетно вставляет много строк как чанкованные многострочные INSERT.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
table |
string |
— | Имя таблицы |
entities |
array |
— | Массив массивов/объектов |
chunkSize |
int |
1000 |
Строк на один INSERT |
- Возвращает ничего. Пустой массив
entities— no-op. - Значения
nullв отдельных строках исключаются. БросаетCDOExceptionпри сбое.
upsert
final public function upsert(
string $table,
object|array $entity,
array $conflictColumns,
?array $updateColumns = null
): mixedВставляет строку либо обновляет/игнорирует её при уникальном конфликте.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
table |
string |
— | Имя таблицы |
entity |
`object\ | array` | — |
conflictColumns |
array |
— | Колонка(и), определяющие уникальность |
updateColumns |
`array\ | null` | null |
- Возвращает первичный ключ на PostgreSQL (через
RETURNING); на MySQL/MariaDB возвращаетlastInsertId()(null, если новая строка не была вставлена). - Бросает
CDOException, еслиconflictColumnsпуст, или при сбое запроса. - Токены выражений
:new/:current— см. Плейсхолдеры апсерта.
upsertGroup
final public function upsertGroup(
string $table,
array $entities,
array $conflictColumns,
?array $updateColumns = null,
int $chunkSize = 500
): voidПакетный апсерт с чанкованием.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
table |
string |
— | Имя таблицы |
entities |
array |
— | Массив массивов/объектов |
conflictColumns |
array |
— | Колонка(и), определяющие уникальность |
updateColumns |
`array\ | null` | null |
chunkSize |
int |
500 |
Строк на запрос |
- Возвращает ничего. Пустой
entities⇒ no-op; пустойconflictColumns⇒ бросает исключение.
update
final public function update(string $table, object|array $entity, Qb $qb): intОбновляет строки, соответствующие условию Qb.
| Параметр | Тип | Описание |
|---|---|---|
table |
string |
Имя таблицы |
entity |
`object\ | array` |
qb |
Qb |
Условие для секции WHERE |
- Возвращает число затронутых строк (
rowCount()). - Бросает
CDOExceptionпри сбое.
delete
final public function delete(string $table, Qb $qb): intУдаляет строки, соответствующие условию Qb.
| Параметр | Тип | Описание |
|---|---|---|
table |
string |
Имя таблицы |
qb |
Qb |
Условие для секции WHERE |
- Возвращает число удалённых строк. Бросает
CDOExceptionпри сбое.
applyDatabaseTimezone
public function applyDatabaseTimezone(mixed $driver, string $tz): voidУстанавливает часовой пояс сессии в соответствие с PHP. Вызывается автоматически при подключении; открыт как публичный, чтобы можно было переприменить его после сброса на уровне драйвера. Поведение по драйверам описано в Определении драйвера.
Только запись; чтение остаётся PDO
Здесь намеренно нет select / find. Читайте унаследованными методами PDO и
фрагментом Qb для WHERE.
Связанное
- Операторы Qb — построение условий
WHERE - Конфигурация — конфиги, пул, statement, bind
- Исключения — модель сбоев и коды SQLSTATE