首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

PHP 經典 MySQL DB 類封裝:連線、查詢、事務與錯誤處理一站式方案

     編輯:MySQL 資料庫相關知識

專為舊專案維護設計的輕量級資料庫抽象層

雖然現代框架多採用 PDO 或 ORM,但大量存量專案仍仰賴 mysql_* 函數。本文整理一個結構清晰、功能完備的 db 類,涵蓋連線管理、預處理模擬、錯誤日誌、結果集處理與常用 CRUD 封裝,助你快速升級舊代碼庫的可維護性。

核心特性

  • 雙連線模式:支援持久連線 (pconnect) 與普通連線切換。
  • 字元集自動設定:連線成功即執行 SET NAMES,杜絕亂碼。
  • 查詢記錄與統計:自動記錄每條 SQL、耗次數,利於效能分析。
  • 錯誤自動記錄入庫:halt() 將錯誤寫入 db_error 表,並可選擇性輸出 HTML 錯誤頁。
  • 資源自動釋放:析構函數自動關閉連線、清理暫存查詢。

關鍵方法速覽

方法用途
connect($config)建立連線,支援 charset 參數
query($sql) / query_unbuffered()執行 SQL,返回資源 ID,自動計數與記錄
fetch_array($res)取得關聯陣列
affected_rows() / num_rows()影響行數 / 查詢行數
insert_id()取得最後自增 ID
free_result() / close_db()釋放結果集 / 關閉連線
row_insert/update/delete/select()高階 CRUD 封裝,自動拼裝 SQL
sql_select/insert/update/delete()SQL 字串產生器,便於複雜查詢自定義

使用範例

<?php
$db_config = [
    'hostname' => '127.0.0.1',
    'username' => 'root',
    'password' => 'secret',
    'database' => 'my_app',
    'charset'  => 'utf8'
];

require_once 'db.class.php';
$db = new db();
$db->connect($db_config);

// 查詢 cid=1 的所有文章
$rows = $db->row_select('articles', 'cid=1', 20, '*', 'id', 'DESC');
foreach ($rows as $row) {
    echo $row['title'] . "<br>";
}

// 新增資料
$db->row_insert('logs', ['msg' => 'User login', 'uid' => 1001]);

// 更新
$db->row_update('users', ['last_login' => date('Y-m-d H:i:s')], 'id=1001');
?>

遷移建議:漸進式升級至 PDO

  1. 保留 db 類介面不變,內部實現逐步替換為 PDO。
  2. 新增 prepare() / execute() 方法,新代碼優先使用參數綁定防注入。
  3. 啟用 PDO::ATTR_ERRMODE = PDO::ERRMODE_EXCEPTION 統一異常處理。
  4. 完成後移除 mysql_* 相容層,專案平滑過渡。

總結

這個 db 類雖基於已棄用的 mysql 擴展,但其設計模式(單一職責、資源封裝、錯誤集中處理)值得借鑑。對於無法立即重構的舊系統,它是穩健的過渡橋樑;對於新專案,請直接擁抱 PDO 或成熟 ORM。

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