php 8 使用 sqlite 做本地存储需启用 sqlite3 和 pdo_sqlite 扩展,支持 sqlite3 类(轻量直连)和 pdo(预处理防注入),并建议配置 wal 模式提升并发、注意文件权限与备份时机。

PHP 8 使用 SQLite 做本地存储非常直接——它不需要数据库服务、不依赖配置,只要一个 `.db` 文件就能跑起来。核心是启用扩展、连接文件、读写数据,整个过程零部署成本。
确认扩展已启用
PHP 8 默认通常已启用 sqlite3 和 pdo_sqlite 扩展,但需手动验证:
- 新建一个
info.php,写入<?php phpinfo(); ?>,浏览器访问后搜索 “sqlite” 或 “pdo_sqlite” - 若没看到,打开
php.ini,取消注释这两行:extension=sqlite3extension=pdo_sqlite - 重启 Web 服务器(或 PHP 内置服务)
用 SQLite3 类快速上手
这是最轻量、最直观的方式,适合简单存取场景:
- 连接并自动建库:
$db = new SQLite3('data.db');(文件不存在时会创建) - 建表(带主键自增和约束):
$db->exec("CREATE TABLE IF NOT EXISTS logs (id INTEGER PRIMARY KEY AUTOINCREMENT, msg TEXT, ts INTEGER)"); - 插入带时间戳的记录:
$db->exec("INSERT INTO logs (msg, ts) VALUES ('用户登录', ".time().")"); - 查询并遍历:
$res = $db->query("SELECT * FROM logs ORDER BY ts DESC LIMIT 10"); while ($row = $res->fetchArray(SQLITE3_ASSOC)) { echo $row['msg']; }
用 PDO 更安全、更可扩展
推荐用于含用户输入的场景,天然支持预处理防注入:
- 连接:
$pdo = new PDO('sqlite:app.db'); - 开启异常模式便于调试:
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); - 准备语句插入:
$stmt = $pdo->prepare("INSERT INTO logs (msg, ts) VALUES (?, ?)"); $stmt->execute(['密码重置', time()]); - 查询返回关联数组:
$rows = $pdo->query("SELECT * FROM logs")->fetchAll(PDO::FETCH_ASSOC);
实用小贴士
本地存储虽简单,几个细节影响稳定性和性能:
- 文件权限:确保 Web 进程(如 www-data、nginx 或 Apache 用户)对 `.db` 文件及其所在目录有读写权限
-
并发写入:SQLite 默认写锁整库;高频率写建议启用 WAL 模式:
$pdo->exec("PRAGMA journal_mode = WAL"); -
备份很简单:直接复制文件即可,例如
copy('app.db', 'backup/app_'.date('Ymd_His').'.db');,但最好在无写操作时执行 - BLOB 存小文件:图片、PDF 等可转为二进制存入 BLOB 字段,避免海量小文件拖慢虚拟主机
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











