PHP 5.1+ 內建 PDO (PHP Data Objects) 提供統一資料庫存取介面,搭配 SQLite 3 嵌入式資料庫,無需獨立資料庫伺服器即可輕鬆實作本地儲存。本文提供完整 CRUD 與交易範例。
pdo_sqlite 擴展,通常預設開啟)。<?php
// 1. 建立連線(檔案不存在會自動建立)
$dsn = 'sqlite:sql.db';
try {
$dbh = new PDO($dsn);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "PDO 連線成功<br>";
// 2. 建立資料表
$dbh->exec("CREATE TABLE IF NOT EXISTS PKU (
id INTEGER PRIMARY KEY,
name VARCHAR(255)
)");
echo "建表成功<br>";
// 3. 插入資料(使用交易確保原子性)
$dbh->beginTransaction();
$dbh->exec("INSERT INTO PKU (id, name) VALUES (1, 'jarjin')");
$dbh->commit();
echo "插入成功<br>";
// 4. 準備查詢並執行
$sth = $dbh->prepare('SELECT * FROM PKU');
$sth->execute();
// 5. 取得所有結果(關聯陣列)
$result = $sth->fetchAll(PDO::FETCH_ASSOC);
print_r($result);
// 關閉連線
$dbh = null;
} catch (PDOException $e) {
echo "連線失敗: " . $e->getMessage();
$dbh = null;
}
?>
| 方法 | 用途 |
|---|---|
new PDO($dsn) | 建立連線,DSN 格式:sqlite:/path/db.sqlite |
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION) | 啟用例外模式,錯誤自動拋出 PDOException |
exec($sql) | 執行不回傳結果集的 SQL(CREATE, INSERT, UPDATE, DELETE),回傳影響行數 |
prepare($sql) | 準備預處理語句,防止 SQL 注入 |
execute([$params]) | 執行預處理語句,參數綁定 |
fetchAll(PDO::FETCH_ASSOC) | 一次取得所有行,回傳關聯陣列 |
beginTransaction() / commit() / rollBack() | 交易控制 |
lastInsertId() | 取得最後插入的自增 ID |
sqlite::memory: 可建立極速暫存資料庫。PDO + SQLite 3 是輕量級 PHP 專案的最佳拍檔,掌握其用法可大幅降低部署複雜度。