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
)');

插入樣本資料

建議在事務中包含相關查詢(使用關鍵字 BEGINCOMMIT),即使你不關心原子性也是如此。如果不這樣做,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();