thinkphp 使用 sqlite 需满足三要素:安装 think-sqlite 扩展(tp8 必须)、dsn 格式为 sqlite:/绝对路径/db.db(单斜杠,无空格中文)、配置中仅保留 type 和 dsn 字段,清空 hostname 等无关项。

ThinkPHP 使用 SQLite 不是默认开箱即用的配置,尤其在 TP6/TP8 中,必须严格遵循三要素:扩展已安装、DSN 格式正确、无关字段清空。小众不等于难配,只是容易踩坑。
必须装扩展(TP8 尤其关键)
TP8 默认不带 SQLite 驱动适配器,仅靠 PHP 自带 pdo_sqlite 扩展不够。需手动引入官方扩展:
- 执行
composer require topthink/think-sqlite - 确认
vendor/topthink/think-sqlite目录存在 -
config/database.php中'type' => 'sqlite'必须显式设置,否则扩展不会被加载
DSN 只认这一种写法
SQLite 的 DSN 不是“可选格式”,而是框架识别驱动类型的唯一依据。错一字符就连接失败:
- 格式固定为:
sqlite:/绝对路径/到/db.db(注意是单正斜杠,不是双斜杠,也不是反斜杠) - Windows 下也必须写成
sqlite:/D:/project/runtime/db/app.db,不能写sqlite:D:\project\runtime\db.app.db - 推荐拼接方式:
'dsn' => 'sqlite:' . app()->getRuntimePath() . 'db/app.db'或'dsn' => 'sqlite:' . __DIR__ . '/../runtime/db/app.db' - 路径中不能含空格、中文、特殊符号;文件名建议全英文+下划线,如
app_data.db
配置块里只留必要字段
SQLite 是嵌入式数据库,不走网络、无用户认证。残留字段会干扰 PDO 初始化:
- 必须删掉或设为空:
'hostname'、'username'、'password'、'database'、'hostport' -
'type'和'dsn'必须同时存在且匹配,缺一不可 - 不要用
:memory:做生产配置——每次请求新建内存库,数据不持久
验证是否真生效
CLI 和 Web 环境工作目录不同,相对路径极易误判。上线前务必验证实际读取的 DSN:
- 命令行运行:
php -r "var_dump(config('database.default.dsn'));" - Web 端可在控制器加:
dump(config('database.default.dsn')); - 迁移命令
php think migrate:run只读config/database.php,不读.env,改完配置要同步检查
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











