PDO persistent connections reuse database connections across compatible PHP requests.
The examples focus on the operation itself, including the important distinction: Nonpersistent PDO connections are simpler to reason about.
What It Does
Use the examples below to observe the behavior on a small dataset before extending it to application code.
Before You Start
The examples use PHP 8.2+ features where shown. Database snippets require the corresponding PDO driver, demo tables, and credentials configured outside source code.
Example 1: Basic Use
Persistent connections can retain session state across requests and require testing of connection-level settings and transaction cleanup.
<?php
$pdo = new PDO(
"mysql:host=127.0.0.1;dbname=demo;charset=utf8mb4",
getenv("DB_USER") ?: "app", getenv("DB_PASSWORD") ?: "",
[PDO::ATTR_PERSISTENT => true, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
);
echo $pdo->getAttribute(PDO::ATTR_DRIVER_NAME);
This example is meant for a configured application environment; output depends on the installed extension, external service, or database contents.
Example 2: Checking Behavior
Persistent connections can retain session state across requests and require testing of connection-level settings and transaction cleanup. Persistent mode affects connection reuse, not the semantics of an individual query.
<?php
$pdo = new PDO(
"mysql:host=127.0.0.1;dbname=demo;charset=utf8mb4",
getenv("DB_USER") ?: "app", getenv("DB_PASSWORD") ?: "",
[PDO::ATTR_PERSISTENT => true, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
);
echo $pdo->getAttribute(PDO::ATTR_PERSISTENT) ? "persistent" : "ordinary";
This example is meant for a configured application environment; output depends on the installed extension, external service, or database contents.
Example 3: Practical Example
Persistent connections can retain session state across requests and require testing of connection-level settings and transaction cleanup. Persistent mode affects connection reuse, not the semantics of an individual query.
<?php
$pdo = new PDO(
"mysql:host=127.0.0.1;dbname=demo;charset=utf8mb4",
getenv("DB_USER") ?: "app", getenv("DB_PASSWORD") ?: "",
[PDO::ATTR_PERSISTENT => true, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
);
echo $pdo->query("SELECT CONNECTION_ID()")->fetchColumn();
This example is meant for a configured application environment; output depends on the installed extension, external service, or database contents.
Important Behavior and Edge Cases
Connection state, uncommitted transactions and session variables need deliberate cleanup; measure actual gains before enabling.
Comparison with Related Approaches
| Approach | Difference |
|---|---|
| Configuring Persistent Database Connections Safely | PDO persistent connections reuse database connections across compatible PHP requests. |
| Related API or alternative | Nonpersistent PDO connections are simpler to reason about. |
Common Beginner Mistakes
| Mistake | Correct approach |
|---|---|
| Ignoring the operation-specific limits | Connection state, uncommitted transactions and session variables need deliberate cleanup; measure actual gains before enabling. |
| Confusing it with a related API | Nonpersistent PDO connections are simpler to reason about. |
Key Takeaways
- PDO persistent connections reuse database connections across compatible PHP requests.
- Connection state, uncommitted transactions and session variables need deliberate cleanup; measure actual gains before enabling.
- Nonpersistent PDO connections are simpler to reason about.
Use Configuring Persistent Database Connections Safely when its documented behavior matches the problem. Test the relevant edge cases in your own runtime before deploying it.