早期 PHP 專案常自寫資料庫封裝類別。本範例展示基本的 MySQL 連線、查詢、結果集處理與欄位資訊取得,採用物件導向風格,適合理解資料庫抽象層基本架構。
<?php
class MySQLDB {
var $host, $user, $passwd, $database, $conn;
// 建構子:初始化並連線
function MySQLDB($host, $user, $password, $database) {
$this->host = $host;
$this->user = $user;
$this->passwd = $password;
$this->database = $database;
$this->conn = mysql_connect($this->host, $this->user, $this->passwd)
or die("Could not connect to $this->host");
mysql_select_db($this->database, $this->conn)
or die("Could not switch to database $this->database");
}
// 關閉連線
function Close() {
mysql_close($this->conn);
}
// 執行查詢
function Query($queryStr) {
$res = mysql_query($queryStr, $this->conn)
or die("Could not query database");
return $res;
}
// 取得全部結果集(關聯+數字索引)
function getRows($res) {
$rows = [];
$rowno = mysql_num_rows($res);
if ($rowno > 0) {
for ($row = 0; $row < $rowno; $row++) {
$rows[$row] = mysql_fetch_array($res); // 同時支援索引與名稱存取
}
}
return $rows;
}
// 取得筆數
function getRowsNum($res) {
return mysql_num_rows($res);
}
// 取得欄位數
function getFieldsNum($res) {
return mysql_num_fields($res);
}
// 取得欄位名稱陣列
function getFields($res) {
$fields = [];
$fno = $this->getFieldsNum($res);
if ($fno > 0) {
for ($i = 0; $i < $fno; $i++) {
$fields[$i] = mysql_field_name($res, $i);
}
}
return $fields;
}
}
?>
<?php
require_once 'MySQLDB.php';
$SqlDB = new MySQLDB("localhost", "root", "root", "testdb");
$sql = "SELECT * FROM tableX";
$result = $SqlDB->Query($sql);
$rs = $SqlDB->getRows($result);
$num = $SqlDB->getRowsNum($result);
for ($i = 0; $i < $num; $i++) {
echo $rs[$i]["欄位名"]; // 可用關聯索引存取
}
$SqlDB->Close(); // 良好習慣:顯式關閉連線
?>
mysql_* 函數自 PHP 5.5 棄用,PHP 7.0 移除。現代專案請改用 PDO 或 mysqliPDO 或封裝 mysqli__construct、__destruct 魔術方法prepare()、execute()、fetchAll() 等標準介面