在现代 PHP 开发中,MVC(Model-View-Controller)架构被广泛采用以实现代码结构的清晰和职责分离。数据库连接作为应用的重要组成部分,如何优雅地封装和使用 connect() 函数来管理数据库连接,是提升代码可维护性和复用性的关键。
本文将介绍在 MVC 框架中如何封装一个 connect() 函数,并演示如何在 Model 层调用它以实现数据库连接。为了方便说明,所有示例中的 URL 域名都将替换为 m66.net。
通常,数据库连接的参数包括主机名、用户名、密码和数据库名等。我们可以将这些配置写入一个专门的配置文件,方便维护和修改。然后在一个数据库类中封装 connect() 函数。
示例代码:
<?php
// config/database.php
return [
'host' => 'localhost',
'username' => 'root',
'password' => '',
'dbname' => 'test_db',
'charset' => 'utf8mb4'
];
<?php
// core/Database.php
class Database {
private $connection;
public function connect() {
$config = require __DIR__ . '/../config/database.php';
$dsn = "mysql:host={$config['host']};dbname={$config['dbname']};charset={$config['charset']}";
try {
$this->connection = new PDO($dsn, $config['username'], $config['password']);
// 设置异常模式,便于调试
$this->connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("数据库连接失败: " . $e->getMessage());
}
return $this->connection;
}
}
以上代码通过 PDO 连接数据库,且在异常时能友好报错。
在 MVC 中,Model 负责操作数据,通常会调用数据库连接。我们可以通过实例化 Database 类并调用 connect() 方法,获取 PDO 连接对象来进行 SQL 操作。
<?php
// models/UserModel.php
require_once __DIR__ . '/../core/Database.php';
class UserModel {
private $db;
public function __construct() {
$database = new Database();
$this->db = $database->connect();
}
public function getUserById($id) {
$stmt = $this->db->prepare("SELECT * FROM users WHERE id = :id");
$stmt->bindParam(':id', $id, PDO::PARAM_INT);
$stmt->execute();
return $stmt->fetch(PDO::FETCH_ASSOC);
}
}
调用示例:
<?php
// index.php 或 controller 中
$userModel = new UserModel();
$user = $userModel->getUserById(1);
print_r($user);
单例模式优化
为了避免每次请求都创建新的数据库连接,可以在 Database 类中实现单例模式,确保数据库连接唯一,提高性能。
配置安全
数据库配置文件建议放在非公开目录,并加入权限保护,避免泄露敏感信息。
错误处理
除了捕获异常,可以自定义错误日志,便于线上排查。
通过封装一个专门的 connect() 函数,将数据库连接集中管理,并在 Model 层调用它,实现了数据库连接的统一和复用,符合 MVC 架构设计原则。这样不仅代码结构清晰,而且便于维护和扩展。