最近花了十多天重寫部落格系統,果斷捨棄 MySQL,改用 PHP 5 搭配 SQLite。主因在於 MySQL 維護繁瑣,且虛擬主機常需額外付費購買資料庫空間。SQLite 作為輕量級、基於檔案的嵌入式資料庫,自 2000 年誕生以來,經過多年發展已成為最流行的嵌入式資料庫,連 Google 桌面軟體也用它儲存用戶資料,穩定性毋庸置疑。
PHP 5 提供兩種連接方式:預設的 SQLite 擴展(僅支援 SQLite 2)與 PDO(PHP Data Objects)。PDO 可間接支援 SQLite 3,兼容性更佳。以下封裝一個同時相容兩個版本的 PDO 類別:
class SQLite {
private $Connection;
public function __construct($file) {
try {
$this->Connection = new PDO('sqlite2:' . $file);
} catch (PDOException $e) {
try {
$this->Connection = new PDO('sqlite:' . $file);
} catch (PDOException $e) {
exit('Error: 無法連接資料庫');
}
}
}
public function __destruct() {
$this->Connection = null;
}
public function query($sql) {
return $this->Connection->query($sql);
}
public function execute($sql) {
return $this->query($sql)->fetch();
}
public function recordArray($sql) {
return $this->query($sql)->fetchAll();
}
public function recordCount($sql) {
return count($this->recordArray($sql));
}
public function lastInsertId() {
return $this->Connection->lastInsertId();
}
}
實例化時若資料庫檔案存在則自動開啟,不存在則自動建立:
$db = new SQLite('blog.db'); // 檔名自訂
建立資料表:
$db->query("CREATE TABLE test (id INTEGER PRIMARY KEY, title VARCHAR(50))");
新增資料:
$db->query("INSERT INTO test (title) VALUES ('泡菜')");
$db->query("INSERT INTO test (title) VALUES ('藍雨')");
$db->query("INSERT INTO test (title) VALUES ('Ajan')");
$db->query("INSERT INTO test (title) VALUES ('傲雪藍天')");
讀取資料(foreach 迴圈):
$sql = "SELECT title FROM test ORDER BY id DESC";
foreach ($db->query($sql) as $row) {
echo $row['title'] . '<br>';
}
對企業級應用 SQLite 或許略顯輕量,但對個人專案、小型網站而言,它免安裝、可攜帶、零配置、跨平台特性極具吸引力。以上為個人開發心得,如有疏漏歡迎指正。