thinkphp部署数据库连接核心是确保框架正确识别并建立通信链路,常见问题源于路径、字段名、环境变量、权限或网络配置错误;四类配置方式:一、.env文件快速配置(推荐新项目);二、config/database.php全局配置(稳定项目首选);三、运行时动态连接多个数据库(多租户/跨库必备);四、dsn字符串方式(脚本/命令行适用)。

ThinkPHP部署数据库连接,核心是让框架能正确识别并建立到目标数据库的通信链路。配置不生效、报错“Connection refused”或“Access denied”,多数源于路径选错、字段名写错、环境变量未加载,或权限/网络未就绪。下面按实际部署中最常遇到的场景,分四类讲清配置步骤。
一、用 .env 文件快速配置(推荐新项目)
这是 ThinkPHP 6+ 默认优先读取的方式,适合开发、测试、生产环境快速切换,无需改代码。
- 在项目根目录创建或编辑 .env 文件,写入标准键名(注意大小写和下划线):
DB_HOSTNAME=127.0.0.1
DB_DATABASE=your_db_name
DB_USERNAME=root
DB_PASSWORD=your_pass
DB_HOSTPORT=3306
DB_CHARSET=utf8mb4
DB_PREFIX=tp_
- 确保 .env 文件未被 Git 忽略(检查 .gitignore 是否误删了该行),且部署时一同上传;
- 修改后清空 runtime/cache/ 目录,避免旧缓存干扰;
- 验证是否生效:在控制器中执行
Db::query('SELECT 1'),不抛异常即连通。
二、通过 config/database.php 全局配置(稳定项目首选)
适用于单库主从、需精细控制连接参数(如 charset、deploy、rw_separate)的项目。
- 打开 config/database.php,返回一个数组,必须包含以下键:
'hostname' => '127.0.0.1',
'database' => 'thinkphp_db',
'username' => 'root',
'password' => '123456',
'hostport' => '3306',
'charset' => 'utf8mb4',
'prefix' => 'tp_',
- type 值不可省略,也不可用 'mysqli' 或 'pdo' 替代,必须是框架支持的驱动标识(如 'mysql'、'pgsql');
- 若使用 MySQL 8+,建议显式加
'params' => [PDO::ATTR_CASE => PDO::CASE_NATURAL]避免字段名大小写问题; - 配置文件路径需准确:ThinkPHP 6 是
config/database.php,ThinkPHP 5.x 可能在application/config/database.php。
三、运行时动态连接多个数据库(多租户/跨库查询必备)
当需要临时访问日志库、报表库或第三方业务库时,不污染全局配置。
- 在控制器或服务类中引入:
use think\facade\Db; - 构造完整连接数组,键名与 database.php 一致(不是 DB_HOST 而是 hostname):
'type' => 'mysql',
'hostname' => '192.168.10.200',
'database' => 'report_center',
'username' => 'rep_user',
'password' => 'safe123',
'charset' => 'utf8mb4'
]);
- 后续操作必须基于该实例:
$reportDb->name('stat_day')->where('date', '2026-07-01')->select(); - 注意:每次调用
Db::connect()都新建连接,勿在循环内反复调用; - 若频繁切换,可封装为服务类缓存连接实例,避免重复握手开销。
四、DSN 字符串方式(脚本/命令行场景适用)
适合一次性任务、数据迁移脚本或 CI/CD 环境变量注入,简洁但难维护。
- 格式为:
mysql://用户名:密码@主机:端口/数据库名#编码; - 特殊字符必须 urlencode(),例如密码含 @ 时写成
pass%40123; - 示例:
$db = Db::connect($dsn);
- DSN 不支持 params、deploy、rw_separate 等高级配置项;
- 无法设置表前缀 prefix,需在查询时手动拼接或用 name() 指定全名。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











