ThinkPHP6.0如何配置数据库_ThinkPHP6.0数据库配置方法【设置】

浅枫小哥_5643

浅枫小哥_5643

2026-05-15

605人浏览

原创

database.php 是唯一生效位置,多库必须在 'connections' 中定义唯一命名连接,default 连接必须完整;db::connect('name') 切换连接,db::name() 始终走默认连接;读写分离需同时满足 deploy=>1、rw_separate=>true 且 read/write 同级;模型通过 $connection 属性绑定指定连接。

thinkphp6.0如何配置数据库_thinkphp6.0数据库配置方法【设置】

database.php 是唯一生效位置,其他地方写的数据库配置(比如 .env 里只配一个库、模型里硬编码)都无法覆盖或扩展多库能力。默认连接必须存在且完整,否则 Db:: 调用直接报错。

如何在 config/database.php 中正确定义多个独立数据库连接

ThinkPHP 6 不支持「写多个同名连接」或「在 default 下堆数组」,所有额外数据库都必须作为命名连接注册进 'connections' 数组,且键名全局唯一(不能叫 mysql、pgsql 等驱动名)。

常见错误现象:Db::connect('user')->table('essential_information')->select() 报错“Connection not found”,实际是因为 'user' 没在 connections 里定义,或者键名拼错了。

  • 'connections' 必须是关联数组,每个子项是一个完整连接配置(含 type、hostname、database、username、password 等)
  • prefix 建议设为空字符串(''),跨库时避免表名被自动拼接前缀导致查不到
  • 不同连接的 charset 可以不同,比如主库用 utf8mb4,日志库用 latin1,但需确保 MySQL 服务端支持
  • 如果连接的是远程从库,建议加 'params' => [PDO::ATTR_PERSISTENT => true] 减少连接开销

Db::connect() 和 Db::name() 的行为差异与误用陷阱

Db::name('user') 永远走当前默认连接(即 config/database.php 中 'default' 指向的那个连接),它不认你定义的 'user' 或 'admin' 连接名;而 Db::connect('user') 才真正切换到名为 'user' 的那个连接配置。

常见错误写法:Db::connect('user')->name('essential_information')->select() —— 表面看没问题,但一旦中间插入 ->cache() 或 ->useSoftDelete(),底层可能因连接复用逻辑丢失上下文,返回主库数据。

btpanel phpsite 宝塔面板PHP网站
btpanel phpsite 宝塔面板PHP网站

宝塔面板 PHP 网站管理:站点创建、删除、启停、PHP 版本切换、域名管理、SSL证书管理、伪静态管理、数据库管理

下载
  • 推荐写法:$db = Db::connect('user'); $db->table('essential_information')->select();
  • table() 直传真实表名,不依赖 prefix,跨库更可控;name() 会自动拼前缀,容易出错
  • 事务只在单连接内有效:Db::connect('a')->startTrans() 和 Db::connect('b')->startTrans() 是两个完全隔离的事务,无法跨库提交或回滚

主从分离配置为何不生效?关键开关和结构约束

主从不是“写了 read 就自动轮询”,TP6 必须同时满足三个条件才触发读写分离逻辑:存在有效的 default 连接、'deploy' => 1、'rw_separate' => true,且 read 和 write 必须是同级键(不能塞在某个连接配置内部)。

常见错误现象:SELECT 语句始终走主库,read 配置像没写一样。大概率是漏了 'deploy' => 1,或者把 read 写在了 'connections.mysql.read' 里(TP6 不识别这种嵌套)。

  • 'deploy' => 1 是总开关,缺了它整个读写分离模块不会加载
  • 'write' 只能是单个数组,不能是数组套数组;'read' 可以是单个数组(一个从库)或数组套数组(多个从库,TP 随机选)
  • 带锁查询(如 ->lock(true))、事务内所有查询、FOR UPDATE 原生 SQL,全部强制走主库,这是框架级一致性保障,无法绕过
  • SSL 配置只能通过 params 数组传入,键名必须是 PDO 常量(如 PDO::MYSQL_ATTR_SSL_CA),路径必须是服务器绝对路径

模型类如何绑定指定数据库连接

模型默认只认 default 连接,即使你在 database.php 里定义了 'log_db',app\model\UserLog 类也不会自动连过去。最稳的方式是在模型类中显式声明 protected $connection = 'log_db';。

这个属性优先级高于全局配置,且在模型初始化阶段就绑定,比重写 getConnection() 方法更轻量、更可靠。

  • 不要在构造函数里调用 Db::connect() 并赋值给属性——模型实例化早于连接初始化,会报错
  • 如果该模型需要动态切换连接(比如按用户 ID 分库),应重写 getConnection() 方法,但要注意缓存和连接复用问题
  • $connection 的值必须是 connections 中已定义的键名,大小写敏感,且不能含空格或特殊字符
复杂点在于:连接名、模型绑定、查询链式调用三者之间没有隐式联动,全靠显式指定;任何一处漏掉或拼错,就会静默降级到默认连接,而不是报错提示。最容易被忽略的是 prefix 默认值和 deploy 开关,它们不报错,但让多库逻辑彻底失效。

php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

php thinkphp

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2023.09.01

10224

6

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

6041

5

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

2095

5

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

2023.10.23

3788

4

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

2023.10.23

4494

6

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.03

3531

9

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.09

5037

8

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.13

3942

8

sprintf函数用法详解
sprintf函数用法详解

sprintf函数的用法:1、格式化字符串;2、指定输出宽度和精度;3、返回值。更多关于sprintf函数用法详解的内容,大家可以阅读下面的文章。

2023.11.27

11902

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
墨刀帮助中心
墨刀帮助中心

共0课时 | 0人学习

MyEclipse学习中心
MyEclipse学习中心

共0课时 | 0人学习

Apache Subversion 官方手册
Apache Subversion 官方手册

共0课时 | 0人学习