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

PHP 輕量級資料庫操作類:支援鏈式呼叫、CRUD 與流暢介面

     編輯:PHP 綜合知識

設計初衷:小專案也要優雅的資料庫操作

面對繁瑣的 SQL 拼接與重複的 CRUD 程式碼,這個不足 100 行的 Model 類提供了鏈式呼叫、自動組裝 SQL、支援多表操作的輕量解決方案,極適合快速原型開發與中小型專案。

核心特性

  • 🔗 鏈式操作:$user->field('id,name')->where('id>3')->order('id desc')->limit(5)->select()
  • 🛠 完整 CRUD:select / insert / update / delete / find / total
  • ⚡ 零依賴:僅依賴 mysql_* 函式(註:生產環境建議升級至 PDO/MySQLi)
  • 🏭 工廠模式:M('table') 快速實例化

完整類程式碼

<?php
/**
 * 輕量級資料庫操作類 Model
 * @author summer <wenghang1228@me.com>
 * @version 1.0
 */
class Model {
    public $field, $tabname, $where, $order, $limit;

    // 建構子:連線資料庫、設定資料表
    public function __construct($tabname) {
        mysql_connect(HOST, USER, PASSWORD);
        mysql_select_db(DBNAME);
        mysql_query("SET NAMES utf8");
        $this->tabname = $tabname;
    }

    // 鏈式方法:皆回傳 $this
    public function field($field)  { $this->field = $field;  return $this; }
    public function where($where)  { $this->where = "WHERE $where"; return $this; }
    public function order($order)  { $this->order = "ORDER BY $order"; return $this; }
    public function limit($limit)  { $this->limit = "LIMIT $limit"; return $this; }

    // 查詢
    public function select($all = "") {
        $sql = $all
            ? "SELECT {$all} FROM {$this->tabname} ORDER BY id"
            : "SELECT {$this->field} FROM {$this->tabname} {$this->where} {$this->order} {$this->limit}";
        $rst = mysql_query($sql);
        while ($row = mysql_fetch_assoc($rst)) $rows[] = $row;
        return $rows ?? [];
    }

    // 新增
    public function insert($post) {
        foreach ($post as $k => $v) { $keys[] = $k; $vals[] = "'$v'"; }
        $sql = "INSERT INTO {$this->tabname} (" . implode(',', $keys) . ") VALUES (" . implode(',', $vals) . ")";
        return mysql_query($sql) ? mysql_insert_id() : false;
    }

    // 刪除
    public function delete() {
        $sql = "DELETE FROM {$this->tabname} {$this->where}";
        return mysql_query($sql) ? mysql_affected_rows() : false;
    }

    // 更新
    public function update($post) {
        foreach ($post as $k => $v) $sets[] = "$k='$v'";
        $sql = "UPDATE {$this->tabname} SET " . implode(',', $sets) . " {$this->where}";
        return mysql_query($sql) ? mysql_affected_rows() : false;
    }

    // 取單筆
    public function find() {
        $sql = $this->order
            ? "SELECT * FROM {$this->tabname} {$this->order} LIMIT 1"
            : "SELECT * FROM {$this->tabname} ORDER BY id LIMIT 1";
        $rst = mysql_query($sql);
        return mysql_fetch_assoc($rst) ?: false;
    }

    // 總筆數
    public function total() {
        $rst = mysql_query("SELECT COUNT(*) FROM {$this->tabname}");
        return $rst ? mysql_fetch_row($rst)[0] : false;
    }
}

// 工廠函式
function M($tabname) { return new Model($tabname); }

// 設定常數(實際專案請放入配置檔)
define("HOST", "localhost");
define("USER", "root");
define("PASSWORD", "123456");
define("DBNAME", "test");

// 使用範例
$user = M("user");
$list = $user->field("id,name")->where("id>3")->order("id desc")->limit("3")->select();
?>

⚠️ 程式碼修正說明(原文有語法錯誤)

  • insert() 中 $valu 應為 $v,$keystr 應為 $keyStr
  • update() 中 $psot 應為 $post,$val 應為 $v
  • delete() 方法名拼寫錯誤 delect → delete
  • 以上已在本文程式碼中修正

適用場景與局限

適用不適用
中小型專案、快速原型、內部管理系統高併發、大數據量、需事務支援、嚴格 SQL 注入防護的生產環境

進階建議

  1. 將 mysql_* 替換為 PDO 預處理語句,徹底防禦 SQL 注入
  2. 加入 事務支援(beginTransaction/commit/rollback)
  3. 整合 連線池 或單例模式管理資料庫連線
  4. 加入 查詢日誌與效能分析 功能

這個類雖簡單,卻展現了「約定優於配置」與「流暢介面」的設計哲學,是理解 ORM 核心思想的絕佳入門教材。

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