$logs = $promise1->wait(); $stats = $promise2->wait(); PDO 2.0 automatically maps database column types to native PHP types based on schema metadata.
$promise1 = $pdo->queryAsync("SELECT * FROM logs WHERE date = CURDATE()"); $promise2 = $pdo->queryAsync("UPDATE stats SET views = views + 1"); // Do other work...
Eliminates need for manual fetchColumn(0) or fetch(PDO::FETCH_COLUMN) . 2.2 Named Placeholders with Native Array Unpacking PDO 2.0 extends named placeholder support to automatically unpack associative arrays without binding each parameter individually.
Date: October 2023 (based on RFC discussions & PHP 8.2+ ecosystem) Author: Database Abstraction Layer Team Version: PDO 2.0 (Proposed/Conceptual Extended Feature Set) 1. Executive Summary PDO 2.0 represents a significant modernization of PHP’s database abstraction layer. While traditional PDO provided a secure, uniform interface, version 2.0 introduces type-safe operations , asynchronous query support , improved error handling , and native scalar result mapping . These features aim to reduce boilerplate code, improve developer experience (DX), and align PDO with modern ORM-like capabilities without sacrificing performance. 2. Core Extended Features 2.1 Scalar & Single-Row Result Fetching Traditional PDO required verbose handling for single values. PDO 2.0 introduces dedicated fetch modes:
$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false); // default in v2.0 $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_TYPED_OBJECT); PDO 2.0 replaces the generic PDOException with a hierarchy:
use PDOQueryException; try $count = $pdo->fetchScalar( "SELECT COUNT(*) FROM users WHERE role = @role AND active = 1", ['role' => 'admin'] ); // returns int directly catch (PDOQueryException $e) $pdo->getQueryLog()->dump(); throw $e;
| SQL Type | PHP Type | |----------|----------| | INT , SMALLINT | int | | DECIMAL , NUMERIC | string (or float with opt-in) | | BOOLEAN , BIT | bool | | DATE , DATETIME | DateTimeImmutable | | JSON , JSONB | array / stdClass |