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