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

PHP 實作完整資料庫操作類:從連線到查詢的完整封裝指南

     編輯:PHP 綜合知識

前言

在 PHP 開發中,資料庫操作是核心基礎功能。雖然現代框架都內建 ORM 或查詢建構器,但理解如何從零建立一個資料庫操作類,對於掌握底層原理、維護舊專案或輕量級開發仍有重要價值。本文將詳細解析一個功能完整的 PHP 資料庫操作類,涵蓋連線管理、查詢執行、結果獲取、錯誤處理等核心功能。

類別架構設計

這個 database 類別採用封裝設計模式,將 MySQL 連線資源與操作方法封裝在一起,提供直觀的介面:

<?php
class database {
    private $hostname;
    private $user;
    private $pass;
    private $dbname;
    private $linkflag;
    private $charset;

    function __construct() {
        $this->hostname = "localhost";
        $this->user = "root";
        $this->pass = "111";
        $this->dbname = "";
        $this->charset = "utf8"; // 支援 gb2312, GBK, utf8
        
        $this->linkflag = mysql_connect($this->hostname, $this->user, $this->pass);
        mysql_select_db($this->dbname, $this->linkflag) or die($this->error());
        mysql_query("set names " . $this->charset);
    }
    // ... 魔術方法與核心功能方法
}
?>

核心功能解析

1. 魔術方法實現屬性動態存取

透過 __set、__get、__call 實現屬性動態設定與錯誤攔截:

function __set($property_name, $value) {
    return $this->$property_name = $value;
}

function __get($property_name) {
    if (isset($this->$property_name)) {
        return $this->$property_name;
    }
    return null;
}

function __call($function_name, $args) {
    echo "<br><font color=#ff0000>你所調用的方法 $function_name 不存在</font><br>\n";
}

2. 查詢執行與結果獲取

提供多種結果獲取方式,滿足不同場景需求:

function query($sql) {
    $res = mysql_query($sql) or die($this->error());
    return $res;
}

function fetch_array($res) {
    return mysql_fetch_array($res);
}

function fetch_object($res) {
    return mysql_fetch_object($res);
}

function fetch_obj_arr($sql) {
    $obj_arr = array();
    $res = $this->query($sql);
    while ($row = mysql_fetch_object($res)) {
        $obj_arr[] = $row;
    }
    return $obj_arr;
}

3. 錯誤處理與資訊獲取

function error() {
    if ($this->linkflag) {
        return mysql_error($this->linkflag);
    }
    return mysql_error();
}

function errno() {
    if ($this->linkflag) {
        return mysql_errno($this->linkflag);
    }
    return mysql_errno();
}

function affected_rows() {
    return mysql_affected_rows($this->linkflag);
}

4. 進階功能方法

  • num_rows($sql):獲取查詢結果行數
  • insert_id():獲取最後插入的自增 ID
  • result($res, $row, $field):獲取特定欄位值
  • version():獲取 MySQL 伺服器版本
  • data_seek($res, $rowNum):移動結果指標

現代化改良建議

注意:原始碼使用已棄用的 mysql_* 函數(PHP 7.0+ 已移除)。現代專案建議:

  1. 改用 PDO 或 mysqli 擴展
  2. 實作預處理語句防止 SQL 注入
  3. 加入連線池與重連機制
  4. 支援事務控制(commit/rollback)

使用範例

<?php
$db = new database();
// 動態設定資料庫名稱
$db->dbname = "my_database";

$sql = "SELECT * FROM users WHERE status = 1";
$users = $db->fetch_obj_arr($sql);

foreach ($users as $user) {
    echo "用戶: {$user->username} <br>";
}
?>

總結

這個資料庫操作類展示了 PHP 面向對象封裝的經典模式,雖然底層驅動已過時,但其設計思路——連線管理、錯誤處理、多樣化結果獲取——在現代資料庫抽象層中依然適用。理解這些基礎有助於更深入地掌握框架內部運作機制。

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