type填错会导致连接直接失败,必须严格使用小写官方类型(mysql、pgsql、sqlsrv、sqlite),禁用mysql、mysqli等错误写法,否则抛出class not found或unsupported database type错误。

database.php 里 type 填错会导致连接直接失败
ThinkPHP 6+ 的数据库配置在 config/database.php,不是 database.php 单独文件(老版本 TP5 可能有,但新项目基本不用)。填错 type 是最常见报错根源:Class 'think\db\connector\Mysql' not found 或 Unsupported database type 都是它。必须严格用小写,且只支持官方内置类型:mysql、pgsql、sqlsrv、sqlite。别写成 MySQL、mysqli 或 pdo_mysql —— 这些都不认。
DSN 和独立参数二选一,但推荐用独立参数方式
ThinkPHP 支持两种写法:一种是拼完整 dsn 字符串,另一种是拆成 hostname、username 等字段。前者容易出引号/转义问题,后者更直观、可读性强,也方便环境变量注入。例如:
'default' => [
'type' => 'mysql',
'hostname' => '127.0.0.1',
'database' => 'myapp',
'username' => 'root',
'password' => '123456',
'hostport' => '3306',
'charset' => 'utf8mb4',
'prefix' => 'tp_',
]
注意:hostport 是数字,不是字符串;charset 推荐用 utf8mb4(支持 emoji);prefix 末尾不加下划线,框架会自动补。
debug 开启后查 SQL 慢,上线前必须关
开发时设 'debug' => true 能在日志里看到完整 SQL 和执行时间,但会额外记录查询上下文、绑定参数、调用栈,性能损耗明显。线上环境即使没报错,也可能因日志 I/O 拖慢接口。务必确认生产配置中这一项是 false,且不要依赖 env 文件覆盖而忽略 config 本体。
- TP6 默认开发环境启用 debug,但 config/database.php 里的设置会覆盖环境变量
- 如果用了多数据库配置(比如读写分离),每个连接都要单独关
debug - 开启 debug 后,
Db::table('user')->select()生成的 SQL 在日志里是带换行缩进的,但实际执行不依赖格式
SQLite 路径必须写绝对路径,相对路径会找不到文件
用 sqlite 类型时,database 参数不是库名,而是.db 文件的**完整磁盘路径**。写成 'database' => 'runtime/app.db' 会报 Unable to open database: runtime/app.db —— 因为 SQLite 不会自动解析相对路径。正确写法是:
'type' => 'sqlite', 'database' => runtime_path() . 'app.db',
runtime_path() 是 ThinkPHP 内置函数,返回 runtime/ 目录绝对路径。硬编码绝对路径风险高,不推荐;也不要漏掉 .db 后缀,否则创建的是空文件,后续执行 CREATE TABLE 会静默失败。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











