thinkphp 6 数据库连接必须通过 config/database.php 的 connections 配置,type 指定驱动,pdo 参数须用原生常量(如 pdo::attr_errmode)置于 params 数组,ssl 路径需绝对且可读,禁用手动 new pdo 或修改 dsn。

ThinkPHP 6 默认就用 PDO,不需要“切换”或“启用”,但必须通过 database.php 的标准配置驱动它;直接 new PDO 或改 DSN 字符串会绕过框架连接池和日志,属于高危操作。
database.php 是唯一合法入口,不是 DSN 里拼参数
TP6 的数据库连接完全由 config/database.php 中的 connections 数组控制。你不能在 DSN 字符串里加 ?ssl_mode=required,也不能在模型里手动 new PDO —— 这样既不会走连接池,也无法被框架的调试、日志、重连逻辑接管。
-
type必须设为'mysql'(或其他支持 PDO 的类型,如'pgsql'、'dm'),框架据此加载对应 connector 类(如\think\db\connector\Mysql) -
hostname、database、username、password等基础字段填值,框架自动组装 DSN - 所有 PDO 层级的选项(如错误模式、SSL、持久化)必须塞进
params数组,键名严格使用 PDO 常量,例如PDO::ATTR_ERRMODE、PDO::MYSQL_ATTR_SSL_CA - 若漏掉
params,PDO::ATTR_ERRMODE默认是PDO::ERRMODE_SILENT,PG 的 NOTICE 不报错、MySQL 的警告被吞掉,排查问题时容易卡壳
params 里必须用 PDO 常量作键名,字符串无效
很多开发者写成 'attr_errmode' => PDO::ERRMODE_EXCEPTION 或 'pdo_attr_errmode',结果这些配置被完全忽略 —— TP6 的 PDO 连接器只认原生常量作为数组键。
- 正确写法:
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION - SSL 场景:
PDO::MYSQL_ATTR_SSL_CA => '/etc/mysql/ssl/ca.pem',路径必须是服务器本地绝对路径 - PostgreSQL 需要显式开异常:
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,否则NOTICE和部分错误不抛出 - 达梦(DM)驱动也依赖此机制,
params中可加PDO::ATTR_CASE => PDO::CASE_LOWER统一字段名大小写
不要碰 PDO::ATTR_PERSISTENT,TP6 连接池已覆盖它
在 params 里加 PDO::ATTR_PERSISTENT => true 几乎没用:TP6 的 Connection 类在析构时强制置空 $this->pdo,PDO 持久化连接被主动断开。这不是 bug,是设计使然。
- 真正生效的是
'deploy' => 1(开启连接池),配合'pool_size'和'pool_time'控制复用行为 - 如果硬要用原生长连接(比如对接 mysqli 驱动),得换
type => 'mysqli'并配'persistent' => true,但 TP6 官方不维护该路径,稳定性无保障 - 主从分离场景下,从库配置里加
PDO::ATTR_PERSISTENT依然无效,应统一走deploy=1+ 合理的pool_size
多库连接必须预定义键名,不能传数组或点号
调用 Db::connect('log_db') 时,框架只去 database.php 的 connections['log_db'] 里找完整配置。临时传数组、含点号(如 'log.db')、大写字母(如 'LogDB')都会触发 Connection not found 错误。
- 每个库必须在
connections下独立声明,哪怕只是 hostname 不同,也不能靠运行时拼接 - 复制配置后务必核对
type:把 MySQL 配置误用于 PostgreSQL,会报Class 'PDO' not found(实际是 connector 类找不到) -
.env只能覆盖扁平变量(如DB_HOST),无法定义嵌套的多库结构,多环境多库必须靠 config 文件分支管理
最易被忽略的一点:证书路径写相对路径(如 ./cert/ca.pem)或 URL(如 https://xxx/ca.pem)必然失败 —— params 中所有 SSL 路径都必须是 PHP 进程有读权限的绝对路径,且私钥不能带密码。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











