Что действительно унифицирует PDO
PDO даёт общий способ соединения, prepare, execute и fetch, но dialect, типы, DDL и isolation остаются свойствами СУБД. Pulse использует SQLite для локального учебного сценария и отдельный integration profile для production-драйвера. Успех одного не считается доказательством другого.
DSN и options собираются конфигурацией. ERRMODE_EXCEPTION включён явно, fetch mode задан у запроса, а charset является частью соединения, а не надеждой на значение по умолчанию.
Граница атомарности
Placeholder только для значения
Prepared statement разделяет структуру SQL и значения. Идентификатор таблицы, имя колонки и направление сортировки placeholder не принимают; их выбирают из серверного allowlist. Динамический IN получает отдельный placeholder на каждое значение.
Native prepares предпочтительны там, где драйвер поддерживает нужное поведение. Emulated prepares меняют parsing и типизацию, поэтому настройка фиксируется и покрывается тестом, а не остаётся случайным default.
Типы на входе и выходе
bindValue с явным PDO::PARAM_INT полезен для LIMIT и целых ключей. Но не все типы базы отображаются в PHP одинаково: decimal часто приходит строкой, boolean зависит от драйвера, большие числа требуют осторожности. Mapper проверяет форму строки до объекта.
Не используйте rowCount SELECT как переносимый подсчёт. Выполните COUNT, если он нужен, или проверьте наличие fetch результата по контракту конкретного запроса.
Retry только всей операции
Deadlock или serialization failure иногда допускают повтор всей транзакции с ограниченным backoff. Нельзя повторять только последний INSERT, если предыдущие действия уже изменили состояние. Операция должна быть идемпотентной или иметь ключ дедупликации.
DDL внутри транзакции ведёт себя по-разному. Миграции Pulse отдельно тестируются на целевой СУБД, а application transaction не смешивается с изменением схемы.
Лаборатория
Сохраните batch событий и cursor атомарно. Смоделируйте исключение между действиями, повтор одного batch и попытку передать sort direction как пользовательскую строку.
- SQL structure выбирается allowlist.
- Rollback возвращает cursor и события в прежнее состояние.
- Integration test использует production-драйвер.
Закрепите материал
Отметка, заметка, чек-лист и ответы остаются в localStorage этого браузера и не отправляются в аналитику.
Перелинковка со справочником
Проверка актуальности
- php.nethttps://www.php.net/manual/en/book.pdo.phpПервичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.
- getcomposer.orghttps://getcomposer.org/doc/articles/composer-platform-dependencies.mdПервичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.
Текст и схемы созданы для этого самоучителя без воспроизведения страниц, иллюстраций и листингов приложенной книги. Проверено: .