本文提供一個可直接使用的 PHP 類別 DbHelpClass,採用 PDO 透過 ODBC 驅動程式連接 Microsoft Access (.mdb) 資料庫,並封裝了預處理語句的查詢與寫入方法,適合輕量級專案或維護舊系統時參考。
class DbHelpClass
{
private $conn;
private $qxId;
private $ret;
public function __construct()
{
// Access 檔案路徑,請依實際環境調整
$path = "../../App_Data/sd#f#45G_!.mdb";
$constr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" . realpath($path);
try {
$this->conn = new PDO("odbc:$constr");
$this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("PDO 連線失敗: " . $e->getMessage());
}
}
/**
* 執行查詢並回傳所有結果
* @param string $sql SQL 語句,支援命名參數(如 :id)
* @param array $params 參數陣列 ['id' => 1]
* @return array
*/
public function Read($sql, $params = [])
{
$stmt = $this->conn->prepare($sql);
foreach ($params as $key => $val) {
$stmt->bindValue(":$key", $val);
}
$stmt->execute();
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
/**
* 執行新增、修改、刪除
* @param string $sql
* @param array $params
* @return bool
*/
public function Edit($sql, $params = [])
{
$stmt = $this->conn->prepare($sql);
foreach ($params as $key => $val) {
$stmt->bindValue(":$key", $val);
}
return $stmt->execute();
}
}
// 使用範例
$dbh = new DbHelpClass();
// 查詢
$rows = $dbh->Read("SELECT * FROM users WHERE id = :id", ['id' => 1]);
// 寫入
$dbh->Edit("INSERT INTO logs (msg) VALUES (:msg)", ['msg' => '測試']);
bindValue 綁定,有效防止 SQL 注入。PDO::ATTR_ERRMODE_EXCEPTION,以便統一捕獲異常。__destruct 釋放。適合小型專案、內部工具、或需快速整合現有 Access 資料的情境。大型高併發系統建議遷移至 MySQL、PostgreSQL 或 SQL Server。