SQLite 与 PHP 的使用
SQLite 是一个轻量级的嵌入式数据库,特别适用于小型应用、网站或移动端项目。PHP 内置支持 SQLite,可以直接使用 SQLite 进行数据库操作,而无需安装额外的数据库服务器。
1. 检查 PHP 是否支持 SQLite
在 PHP 中,可以使用 phpinfo() 检查是否已启用 SQLite:
<?php
phpinfo();
?>
如果看到 SQLite3 或 PDO_SQLITE,说明已经启用。
如果你的 PHP 环境未启用 SQLite,可以在 php.ini 文件中取消以下行的注释:
extension=sqlite3
extension=pdo_sqlite
然后重新启动 Web 服务器(Apache 或 Nginx)。
2. 使用 SQLite3 扩展
2.1. 创建 SQLite 数据库
PHP 提供 SQLite3 类,可以直接操作 SQLite 数据库:
<?php
$db = new SQLite3('test.db'); // 创建或打开 SQLite 数据库
echo "数据库连接成功";
?>
运行后,会在当前目录下生成 test.db 文件。
2.2. 创建表
<?php
$db = new SQLite3('test.db');
$query = "CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER NOT NULL
)";
$db->exec($query);
echo "表已创建";
?>
2.3. 插入数据
<?php
$db = new SQLite3('test.db');
$stmt = $db->prepare("INSERT INTO users (name, age) VALUES (:name, :age)");
$stmt->bindValue(':name', 'Alice', SQLITE3_TEXT);
$stmt->bindValue(':age', 25, SQLITE3_INTEGER);
$stmt->execute();
echo "数据插入成功";
?>
2.4. 查询数据
<?php
$db = new SQLite3('test.db');
$result = $db->query("SELECT * FROM users");
while ($row = $result->fetchArray(SQLITE3_ASSOC)) {
echo "ID: " . $row['id'] . " - 姓名: " . $row['name'] . " - 年龄: " . $row['age'] . "<br>";
}
?>
2.5. 更新数据
<?php
$db = new SQLite3('test.db');
$stmt = $db->prepare("UPDATE users SET age = :age WHERE name = :name");
$stmt->bindValue(':age', 30, SQLITE3_INTEGER);
$stmt->bindValue(':name', 'Alice', SQLITE3_TEXT);
$stmt->execute();
echo "数据更新成功";
?>
2.6. 删除数据
<?php
$db = new SQLite3('test.db');
$stmt = $db->prepare("DELETE FROM users WHERE name = :name");
$stmt->bindValue(':name', 'Alice', SQLITE3_TEXT);
$stmt->execute();
echo "数据删除成功";
?>
3. 使用 PDO 连接 SQLite
PDO(PHP Data Objects)是 PHP 提供的数据库抽象层,支持 SQLite、MySQL、PostgreSQL 等数据库。
3.1. 连接 SQLite 数据库
<?php
try {
$pdo = new PDO("sqlite:test.db");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "成功连接 SQLite 数据库";
} catch (PDOException $e) {
echo "连接失败: " . $e->getMessage();
}
?>
3.2. 创建表
<?php
$pdo = new PDO("sqlite:test.db");
$sql = "CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER NOT NULL
)";
$pdo->exec($sql);
echo "表创建成功";
?>
3.3. 插入数据
<?php
$pdo = new PDO("sqlite:test.db");
$stmt = $pdo->prepare("INSERT INTO users (name, age) VALUES (?, ?)");
$stmt->execute(['Bob', 28]);
echo "数据插入成功";
?>
3.4. 查询数据
<?php
$pdo = new PDO("sqlite:test.db");
$stmt = $pdo->query("SELECT * FROM users");
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo "ID: " . $row['id'] . " - 姓名: " . $row['name'] . " - 年龄: " . $row['age'] . "<br>";
}
?>
3.5. 更新数据
<?php
$pdo = new PDO("sqlite:test.db");
$stmt = $pdo->prepare("UPDATE users SET age = ? WHERE name = ?");
$stmt->execute([35, 'Bob']);
echo "数据更新成功";
?>
3.6. 删除数据
<?php
$pdo = new PDO("sqlite:test.db");
$stmt = $pdo->prepare("DELETE FROM users WHERE name = ?");
$stmt->execute(['Bob']);
echo "数据删除成功";
?>
4. SQLite 高级用法
4.1. 事务(提高性能)
<?php
$pdo = new PDO("sqlite:test.db");
$pdo->beginTransaction();
try {
$pdo->exec("INSERT INTO users (name, age) VALUES ('Eve', 22)");
$pdo->exec("INSERT INTO users (name, age) VALUES ('David', 30)");
$pdo->commit();
echo "事务提交成功";
} catch (Exception $e) {
$pdo->rollBack();
echo "事务回滚:" . $e->getMessage();
}
?>
4.2. 使用索引优化查询
<?php
$pdo = new PDO("sqlite:test.db");
$pdo->exec("CREATE INDEX idx_name ON users(name)");
echo "索引创建成功";
?>
4.3. 启用 WAL 模式(提高并发性能)
<?php
$pdo = new PDO("sqlite:test.db");
$pdo->exec("PRAGMA journal_mode=WAL;");
echo "WAL 模式启用";
?>
4.4. 设置只读模式
<?php
$pdo = new PDO("sqlite:file:test.db?mode=ro");
echo "数据库只读模式";
?>
总结
| 主题 | SQLite3 | PDO |
|---|---|---|
| 连接数据库 | $db = new SQLite3('test.db'); | $pdo = new PDO("sqlite:test.db"); |
| 创建表 | $db->exec("CREATE TABLE ...") | $pdo->exec("CREATE TABLE ...") |
| 插入数据 | $stmt->bindValue(':name', 'Alice', SQLITE3_TEXT); | $stmt->execute(['Alice', 25]); |
| 查询数据 | $result->fetchArray(SQLITE3_ASSOC); | $stmt->fetch(PDO::FETCH_ASSOC); |
| 事务 | $db->exec("BEGIN TRANSACTION"); | $pdo->beginTransaction(); |
SQLite 适合小型 Web 应用,如果你的 PHP 项目不需要高并发、分布式数据库,那么 SQLite 是一个简单、高效的选择!
更多详细内容请关注其他相关文章。