在php中连接mysql数据库后,必须显式关闭连接以释放服务器资源。推荐使用pdo或mysqli扩展,通过调用 close() 方法(mysqli)或析构函数/ null 赋值(pdo)来断开连接。

使用MySQLi扩展如何正确关闭连接
使用MySQLi时,需手动调用 $mysqli->close() 方法。若未调用,脚本结束时PHP会自动清理,但显式关闭能避免长时间占用连接池。

<?php $host = 'localhost';
$user = 'root';
$pass = '';
$db = 'test_db';
$mysqli = new mysqli($host, $user, $pass, $db);
if ($mysqli->connect_error) {
die('Connection failed: ' . $mysqli->connect_error);
}
// 执行查询示例
$result = $mysqli->query('SELECT * FROM users');
while ($row = $result->fetch_assoc()) {
echo $row['username'] . '<br>';
}
// 显式关闭连接
$mysqli->close();
echo 'Connection closed.';
?>
预期输出:打印用户列表后显示“Connection closed.”。若省略 close(),行为相同但连接可能延迟释放。
使用PDO扩展如何管理连接生命周期
PDO连接对象在超出作用域时自动销毁,但可通过将变量设为 null 提前触发析构。推荐在事务完成后立即处理。
安装、修复、更新或打包一个基于 Python 和 PyMySQL 实现的 Windows `mysql` 命令。适用于用户希望在 PowerShell/CMD 中输入 `mysql` 时重定向到 Python 实现、需要交互式输入 MySQL 连接信息、需要同步到当前用户本地 bin 目录,或需要将该能力封装成可公开复用的 Codex skill。

<?php $dsn = 'mysql:host=localhost;dbname=test_db;charset=utf8mb4';
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
];
try {
$pdo = new PDO($dsn, 'root', '', $options);
// 执行操作
$stmt = $pdo->query('SELECT id, name FROM products');
foreach ($stmt as $product) {
echo $product['name'] . '<br>';
}
// 提前关闭连接
$pdo = null;
echo 'PDO connection released.';
} catch (PDOException $e) {
die('Error: ' . $e->getMessage());
}
?>
预期输出:打印产品名后显示“PDO connection released.”。将 $pdo 赋值为 null 会立即触发析构,释放底层连接。
连接未关闭时可能引发什么具体问题
在高并发场景下,未关闭的连接会累积至MySQL的 max_connections 上限,导致新请求被拒绝。例如,当同时存在超过500个活跃连接时,后续 new mysqli() 或 new PDO() 调用将抛出异常。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










