SQLite 与 PHP 的使用
                           
天天向上
发布: 2025-03-05 23:09:41

原创
918 人浏览过

SQLite 是一个轻量级的嵌入式数据库,特别适用于小型应用、网站或移动端项目。PHP 内置支持 SQLite,可以直接使用 SQLite 进行数据库操作,而无需安装额外的数据库服务器。


1. 检查 PHP 是否支持 SQLite

在 PHP 中,可以使用 phpinfo() 检查是否已启用 SQLite:

<?php
phpinfo();
?>

如果看到 SQLite3PDO_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 "数据库只读模式";
?>

总结

主题SQLite3PDO
连接数据库$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 是一个简单、高效的选择!

更多详细内容请关注其他相关文章。

发表回复 0

Your email address will not be published. Required fields are marked *