類別設計目標
- 封裝連線、查詢、異動、錯誤代碼對照
- 支援多資料庫切換
- 提供關聯陣列 / 數值陣列雙模式回傳
- 統計列數、取得欄位中繼資料、列出資料表
核心程式碼結構 (PHP 4 風格)
class dbLink {
var $DBaseLink, $DBase;
function dbLink($base="") {
$this->DBaseLink = @mysql_connect("host","user","pass");
if(!$this->DBaseLink) die($this->dbError(1));
if($base) $this->dbChange($base);
}
function dbError($n, $sql="") {
$map = array(
1049=>"資料庫不存在", 1050=>"資料表已存在", 1051=>"資料表不存在",
1054=>"欄位不存在", 1062=>"重複鍵值", 1064=>"語法錯誤",
1146=>"資料表不存在", 1044=>"無存取權限", 1045=>"帳密錯誤"
);
echo "Error $n: ".$map[$n]."
$sql";
exit;
}
function dbQuery($sql, $base="", $type=0) {
if($base || $this->DBase!=$base) $this->dbChange($base);
$res = @mysql_query($sql, $this->DBaseLink);
if($err=mysql_errno($this->DBaseLink)) $this->dbError($err,$sql);
$rows = array();
for($i=0,$n=mysql_num_rows($res); $i<$n; $i++) {
$rows[$i] = ($type==0) ? mysql_fetch_assoc($res) : mysql_fetch_row($res);
}
mysql_free_result($res);
return $rows;
}
function dbIo($sql, $base="") { // INSERT/UPDATE/DELETE
if($base || $this->DBase!=$base) $this->dbChange($base);
@mysql_query($sql, $this->DBaseLink);
if($err=mysql_errno($this->DBaseLink)) $this->dbError($err,$sql);
return mysql_insert_id($this->DBaseLink);
}
function dbCountRecords($table, $where="", $base="", $index="id") { ... }
function dbFieldList($table, $base) { ... }
function dbTableList($basename) { ... }
}
使用範例
$db = new dbLink("mydb");
$users = $db->dbQuery("SELECT * FROM users WHERE status=1");
$db->dbIo("INSERT INTO log(msg) VALUES('test')");
$cnt = $db->dbCountRecords("orders", "WHERE status='paid'");
現代化建議 (PHP 7+)
- 改用 PDO 或 mysqli (支援 prepared statement、交易、例外處理)
- 採用
fetchAll(PDO::FETCH_ASSOC) 替代手動迴圈
- 錯誤處理拋出 Exception 而非 die()
- 依賴注入容器管理連線實例