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

PHP MySQL 操作類封裝:仿 ADO 風格的資料庫抽象層實現

     編輯:MySQL 資料庫相關知識

MySQLDB 類:ASP 風格的 PHP 資料庫操作封裝

參考 ASP ADO Recordset 模式設計的 PHP MySQL 操作類,提供 Query/GetValue 查詢模式與 AddNew/SetValue/Update 寫入模式,降低業務代碼與 SQL 耦合度。

核心設計模式

操作類型方法鏈說明
查詢Query() → MoveNext()/MoveTo() → GetValue()游標式逐行讀取,支持字段名/索引取值
新增AddNew() → SetValue()×N → Update()字段級賦值,自動構建 INSERT
編輯Edit(condition) → SetValue()×N → Update()條件定位記錄,自動構建 UPDATE
直接執行Execute(sql)任意 SQL 直通執行

關鍵屬性設計

var $host="localhost", $user="boot", $password="oaserver";
var $linkid, $dbid;                    // 連接/選庫資源
var $sTName;                           // 當前操作表名
var $nErr=0, $sErr="";                 // 錯誤狀態與信息
var $nResult, $aFName, $nRows, $nCols; // 結果集元數據
var $aNew, $NewEdit=0, $sEditCon;      // 寫入緩衝區與狀態
var $sName="", $sValue="#@!", $sEdit="#@!"; // SQL 片段緩衝

核心方法實現亮點

智能字段類型處理(SetValue)

$ftype = @mysql_field_type($this->nResult, $i);
switch($ftype) {
    case "string": case "date": case "datetime":
        $this->sValue .= '"'.$this->aNew[$tmpIn].'"';
        break;
    case "int": case "unknown":
        $this->sValue .= $this->aNew[$tmpIn];
        break;
    default:
        $this->nErr=1; // 不支持類型報錯
}

自動根據字段類型加引號/轉義,減少手寫 SQL 的語法錯誤。

動態 SQL 構建

  • AddNew → Update:構建 INSERT INTO table (fields) VALUES (values)
  • Edit → Update:構建 UPDATE table SET field=value,... WHERE condition

資源管理與事務

function Destroy() {
    mysql_query("commit");
    mysql_close();
}

析構時自動提交事務並關閉連接。

使用示例

$db = new MySQLDB("users", "mydb");

// 查詢
$db->Query("", "*", "status=1", "id DESC", "LIMIT 10");
while(!$db->EOF) {
    echo $db->GetValue("username");
    $db->MoveNext();
}

// 新增
$db->AddNew("users");
$db->SetValue("username", "zhangsan");
$db->SetValue("email", "zhangsan@example.com");
$db->Update();

// 編輯
$db->Edit("id=5", "users");
$db->SetValue("status", 0);
$db->Update();

遷移與現代化建議

⚠️ 重要:代碼基於已棄用的 mysql_* 擴展(PHP 5.5 棄用,7.0 移除)。生產環境必須遷移至 PDO 或 mysqli,並引入預處理語句防注入。

現代化重構要點

  • 連接層:new PDO("mysql:host=...;dbname=...", $user, $pass)
  • 查詢:$stmt = $pdo->prepare("SELECT * FROM users WHERE status=?"); $stmt->execute([1]);
  • 寫入:同樣用 prepare() + execute(),綁定參數
  • 錯誤處理:啟用 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved