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 等資料庫系統的時間。