在ThinkPHP6.0中配置多个数据库连接需在database.php的connections中预定义唯一小写键名连接,严格填写type等五项参数并执行php think clear:config刷新缓存;可通过.env分离环境参数;运行时可用Db::connect()动态切换,但禁止高并发下传数组新建连接。

在ThinkPHP6.0中为不同业务模块或读写分离场景配置多个数据库连接,需在配置层显式声明独立连接,并确保键名唯一、驱动类型准确、缓存及时刷新,否则查询会因Connection not found或PDO驱动缺失而直接中断。
在database.php中预定义多个命名连接
这是最稳定、可维护性最强的配置方式,所有连接集中管理,适用于主从分离、跨库同步等长期稳定的多库需求。
第一步:打开config/database.php文件,定位到'connections'数组定义处。
第二步:在'connections'内新增至少两个小写字母+下划线组成的键名,例如'mysql_master'和'mysql_slave';【键名严禁含大写字母、点号或空格】。
立即学习“PHP免费学习笔记(深入)”;
第三步:为每个键完整填写'type'、'hostname'、'database'、'username'、'password'五项,缺一不可;其中'type'必须是mysql、pgsql、sqlsrv等官方支持值,传错将导致Class 'PDO' not found致命错误。
第四步:保存后执行php think clear:config命令清除配置缓存——这一步不能跳过,否则新连接永远不会生效。
通过.env实现环境级参数分离
当开发、测试、生产环境使用不同数据库地址时,用.env注入变量比硬编码更安全、更易部署。
方法一:在项目根目录新建UTF-8无BOM的.env文件,写入两组配置:
[DATABASE]
TYPE=mysql
HOSTNAME=192.168.1.100
DATABASE=prod_db
USERNAME=prod_user
PASSWORD=prod_pass
[DATABASE_SLAVE]
TYPE=mysql
HOSTNAME=192.168.1.101
DATABASE=prod_slave
USERNAME=slave_user
PASSWORD=slave_pass
方法二:修改config/database.php中对应连接的参数,全部改用env()函数读取,例如:'hostname' => env('database_slave.hostname', '127.0.0.1')。
注意:env()第二个参数是兜底默认值,仅用于本地调试,线上环境必须由.env提供真实凭据。
运行时动态切换数据库连接
适合临时查从库、跨库校验或后台任务等按需连接场景,不改变全局默认连接,也不依赖预定义键名(但推荐使用)。
① 调用Db::connect('mysql_slave')获取独立Query实例——括号内必须是database.php中已声明的合法键名。
② 若返回Connection not found: mysql_slave异常,立即检查键名拼写、大小写、是否漏写进connections数组。
③ 执行查询:Db::connect('mysql_slave')->table('log_record')->where('status', 0)->select()。
④ 如需连接未预定义的数据库,可传入完整配置数组:Db::connect(['type'=>'mysql','hostname'=>'x.x.x.x','database'=>'temp']),但【禁止在高并发接口中使用此方式】,它绕过连接池,极易耗尽MySQL最大连接数。



















