在現代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);
單例模式優化<br> 為了避免每次請求都創建新的數據庫連接,可以在Database類中實現單例模式,確保數據庫連接唯一,提高性能
配置安全<br> 數據庫配置文件建議放在非公開目錄,並加入權限保護,避免洩露敏感信息
錯誤處理<br> 除了捕獲異常,可以自定義錯誤日誌,便於線上排查
通過封裝一個專門的connect()函數,將數據庫連接集中管理,並在Model 層調用它,實現了數據庫連接的統一和復用,符合MVC 架構設計原則。這樣不僅代碼結構清晰,而且便於維護和擴展。