在 PHP 中使用 Sqlite3 - 筆記長也NotesHazuya

在 PHP 中使用 Sqlite3

2021-01-17 16:57:00   PHP

Sqlite

Sqlite 是一個輕便的檔案型關聯式資料庫,常利用於本地端的資料庫儲存,例如 chrome 。而我們曾經在前幾篇文章介紹過如何在 laravel 中使用 sqlite,這一篇會介紹在原生的 PHP 當中使用 Sqlite。

Sqlite3 以及 PDO

連結到 sqlite 的方式可以透過 sqlite3 lib 或是 php 原生的 pdo 方式,這篇文章會以 sqlite3 lib 來示範。在開始之前,先透過 phpinfo() 方法來檢查 sqlite3 lib 是否已經被啟用,否則可能會沒辦法連結。

建立資料庫

這邊先以 sqlite3 CLI 手動方式建立一個 sqlite 資料庫。先在工作目錄下執行指令:

sqlite database.sqlite

或是

sqlite3 database.sqlite

進入 CLI 之後,再執行以下語法:

CREATE TABLE "User" (
	"userId"	INTEGER PRIMARY KEY AUTOINCREMENT,
	"UserName"	TEXT,
	"email"	TEXT,
	"PassWord"	TEXT
);

如果 database.sqlite 不存在,執行過上面建立表格的指令後,就會產生一個 database.sqlite 以及 User 的表。

連結到 sqlite

開始進行操作以前,要先連結到 sqlite。

$db = new SQLite3('database.sqlite', SQLITE3_OPEN_CREATE | SQLITE3_OPEN_READWRITE);

插入資料

$statement = $db->prepare('INSERT INTO "User" ("UserName", "email", "PassWord") VALUES (:name, :mail, :pw)');
$statement->bindValue(':name', 'test');
$statement->bindValue(':mail', 'abc@abc');
$statement->bindValue(':pw', '123456');
$statement->execute();

prepare()

利用 prepare 來進行查詢語句的預備,並可以設定參數。

bindValue()

利用 bindValue 來繫結 prepare 中的參數。

execute()

執行上面的查詢語句。

如果語句正確被執行,可以透過 GUI 工具看到資料已經被新增了。

查詢資料

$statement = $db->prepare('SELECT * FROM "User" WHERE "UserName" = ?');
$statement->bindValue(1, 'test');
$statement = $statement->execute();
$statement = $statement->fetchArray(SQLITE3_NUM);
print_r($statement);

基本與插入資料的方法相同,不同的是要將回傳的資料進行處理。

fetchArray()

fetchArray 可以將回傳的資料物件序列化為陣列,而 SQLITE3_NUM 會將欄位以數字方式編號,而 SQLITE3_ASSOC 會將欄位以欄位名稱編號。

多筆回傳資料

如果資料一次有數筆,可以使用 while 來持續輸出:

while($value = $statement->fetchArray(SQLITE3_ASSOC)){
    print($value['userId']);
}

如果使用 SQLITE3_NUM ,將 'userId' 替代成陣列索引即可。

刪除資料

$statement = $db->prepare('DELETE FROM "User" WHERE "userId" = ?');
$statement->bindValue(1, 1);
$statement = $statement->execute();

基本上也與新增與查詢相同,正確執行資料就會被刪除了。

結論

sqlite 具有快速輕便的特性,作為小型專案或是練習之用都相當好用,可以省去架設 mySql 等資料庫系統的時間。

 

關於作者


長也

資管菸酒生,嘗試成為網頁全端工程師(laravel / React),技能樹成長中,閒暇之餘就寫一些筆記。 喔對了,也愛追一些劇,例如火神跟遺物整理師,推推。最愛的樂團應該是告五人吧(?)