在早期的 PHP 開發中,開發者常將資料庫連線邏輯封裝成類別,以便重複使用並簡化操作。本文透過一個具體範例,示範如何建立一個封裝 MySQL 連線、查詢與結果處理的 PHP 類別,並說明其核心方法的運作方式。
該 mysql 類別包含資料庫連線參數(主機、使用者、密碼、資料庫名稱)、連線資源、查詢語句、結果集與資料陣列等私有屬性。建構子負責初始化參數並自動建立連線與選擇資料庫。
mysql_connect 建立連線,失敗時終止腳本並輸出錯誤訊息。mysql_select_db 選擇指定資料庫。class mysql {
private $db_name;
private $db_host;
private $db_user;
private $db_pwd;
private $conn;
private $querysql;
private $result;
private $resultarray = array();
private $row;
// 建構子:初始化參數並自動連線
public function __construct($dbname, $dbhost, $dbuser, $dbpwd) {
$this->db_name = $dbname;
$this->db_host = $dbhost;
$this->db_pwd = $dbpwd;
$this->db_user = $dbuser;
$this->db_connect();
$this->selectdb();
}
// 連線資料庫
private function db_connect() {
$this->conn = mysql_connect($this->db_host, $this->db_user, $this->db_pwd)
or die("Could not Connect MySql Server");
}
// 選擇資料庫
private function selectdb() {
mysql_select_db($this->db_name) or die("unable to select dbname");
}
// 執行查詢
private function query() {
return $this->result = mysql_query($this->querysql);
}
// 取得查詢結果陣列
public function get_result($sql) {
$this->querysql = $sql;
$this->query();
if ($this->get_num() > 0) {
while ($this->row = mysql_fetch_array($this->result)) {
$this->resultarray[] = $this->row;
}
return $this->resultarray;
}
return false;
}
// 取得資料筆數
private function get_num() {
return $this->num = mysql_num_rows($this->result);
}
}
// 使用範例
$m = new mysql("testuser", "localhost", "root", "root");
$arrResult = $m->get_result("SELECT * FROM userinfo");
print_r($arrResult);
上述範例使用已棄用的 mysql_* 函式(PHP 5.5.0 棄用,PHP 7.0.0 移除)。現代專案強烈建議改用 MySQLi 或 PDO,兩者皆支援預處理語句,能有效防止 SQL 注入,並提供物件導向介面。若維護舊專案,可考慮撰寫相容層或逐步重構。
本文提供的封裝思路仍具參考價值:將連線細節隱藏、統一錯誤處理、回傳標準化資料結構,是資料存取層設計的基礎模式。