首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

PHP 構造函數與析構函數封裝 MySQL 查詢類:告別重複連接代碼

     編輯:MySQL 綜合教學

PHP 構造函數與析構函數封裝 MySQL 查詢類:告別重複連接代碼

痛點:傳統寫法的重複樣板代碼

早期在每個 Model 方法裡都要:

  1. mysql_connect() 建立連接
  2. 執行 SQL
  3. mysql_close() 關閉連接

方法一多,連接/關閉代碼到處複製,維護極其痛苦。

解決方案:利用 __construct() / __destruct() 自動管理連接生命週期

Model 類實現(model.php)

<?php
class TestTable {
    private $con;

    // 構造函數:自動連接、選庫、設編碼
    public function __construct($databaseName) {
        $this->con = mysql_connect("localhost", "root", "root");
        if (!$this->con) die("連接失敗!");
        mysql_select_db($databaseName, $this->con);
        mysql_query("SET NAMES utf8");
    }

    // 業務查詢方法:專注 SQL,無需關心連接
    public function getAll() {
        $result = mysql_query("SELECT * FROM testtable ORDER BY date DESC");
        $list = [];
        while ($row = mysql_fetch_array($result)) {
            $list[] = [
                'id'       => $row['id'],
                'username' => $row['username'],
                'number'   => $row['number'],
                'date'     => $row['date']
            ];
        }
        return $list;
    }

    // 析構函數:腳本結束自動關閉連接
    public function __destruct() {
        mysql_close($this->con);
    }
}
?>

Controller 調用(controller.php)

<?php
header("Content-Type: text/html; charset=utf-8");
include_once("model.php");

$model = new TestTable("test");
$data  = $model->getAll();  // 直接查詢,連接自動管理

echo "<table>";
foreach ($data as $row) {
    echo "<tr><td>{$row['id']}</td><td>{$row['username']}</td><td>{$row['number']}</td><td>{$row['date']}</td></tr>";
}
echo "</table>";
?>

優勢總結

  • 零樣板:業務方法只寫 SQL 與結果映射。
  • 自動釋放:腳本結束或對象銷毀時,__destruct() 保證連接關閉,防洩漏。
  • 可擴展:後續可在構造函數加入連接池、讀寫分離、錯誤重試等通用邏輯,業務層零感知。

現代化建議

請棄用 mysql_* 系列函數**(PHP 7.0+ 已移除),改用 PDO** 或 **MySQLi**:

  • 支援預處理語句,防 SQL 注入。
  • 物件導向 API,天然配合構造/析構模式。
  • 支援事務、多結果集、參數綁定等高級特性。

核心思想不變:封裝連接生命週期,讓業務代碼回歸純粹。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved