SQLite3 快速入門教程
這是所有常用的 SQLite 相關 API 的完整示例。目的是讓你快速啟動並執行。你還可以獲得本教程的可執行 PHP 檔案 。
建立/開啟資料庫
讓我們先建立一個新的資料庫。僅在檔案不存在時建立它並開啟它進行讀/寫。檔案的副檔名取決於你,但是 .sqlite
非常常見並且不言自明。
$db = new SQLite3('analytics.sqlite', SQLITE3_OPEN_CREATE | SQLITE3_OPEN_READWRITE);
建立一個表
$db->query('CREATE TABLE IF NOT EXISTS "visits" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"user_id" INTEGER,
"url" VARCHAR,
"time" DATETIME
)');
插入樣本資料
建議在事務中包含相關查詢(使用關鍵字 BEGIN
和 COMMIT
),即使你不關心原子性也是如此。如果不這樣做,SQLite 會自動包裝事務中的每個查詢,這會極大地減慢所有事情。如果你是 SQLite 的新手,你可能會驚訝於 INSERT 的速度如此之慢 。
$db->exec('BEGIN');
$db->query('INSERT INTO "visits" ("user_id", "url", "time")
VALUES (42, "/test", "2017-01-14 10:11:23")');
$db->query('INSERT INTO "visits" ("user_id", "url", "time")
VALUES (42, "/test2", "2017-01-14 10:11:44")');
$db->exec('COMMIT');
使用預準備語句插入可能不安全的資料。你可以使用命名引數執行此操作 :
$statement = $db->prepare('INSERT INTO "visits" ("user_id", "url", "time")
VALUES (:uid, :url, :time)');
$statement->bindValue(':uid', 1337);
$statement->bindValue(':url', '/test');
$statement->bindValue(':time', date('Y-m-d H:i:s'));
$statement->execute(); you can reuse the statement with different values
獲取資料
讓我們今天獲取使用者#42 的訪問量。我們將再次使用預準備語句,但這次使用編號引數,更簡潔:
$statement = $db->prepare('SELECT * FROM "visits" WHERE "user_id" = ? AND "time" >= ?');
$statement->bindValue(1, 42);
$statement->bindValue(2, '2017-01-14');
$result = $statement->execute();
echo "Get the 1st row as an associative array:\n";
print_r($result->fetchArray(SQLITE3_ASSOC));
echo "\n";
echo "Get the next row as a numeric array:\n";
print_r($result->fetchArray(SQLITE3_NUM));
echo "\n";
注意:如果沒有更多行,
fetchArray()
將返回false
。你可以在while
迴圈中利用這一點。
釋放記憶體 - 當指令碼執行時,這不會自動完成
$result->finalize();
速記
這是一個有用的簡寫,用於將單行作為關聯陣列獲取。第二個引數意味著我們想要所有選定的列。
注意,這個簡寫不支援引數繫結,但你可以轉義字串。始終將值放在 SINGLE 引號中! 雙引號用於表名和列名(類似於 MySQL 中的反引號)。
$query = 'SELECT * FROM "visits" WHERE "url" = \'' .
SQLite3::escapeString('/test') .
'\' ORDER BY "id" DESC LIMIT 1';
$lastVisit = $db->querySingle($query, true);
echo "Last visit of '/test':\n";
print_r($lastVisit);
echo "\n";
另一個有用的簡寫,用於檢索一個值。
$userCount = $db->querySingle('SELECT COUNT(DISTINCT "user_id") FROM "visits"');
echo "User count: $userCount\n";
echo "\n";
打掃乾淨
最後,關閉資料庫。但是,當指令碼完成時,這會自動完成。
$db->close();