thinkphp6数据库连接核心是.env+database.php组合配置,必须完整定义type/hostname/database/username/password,多库需connections中声明并db::connect()显式调用,模型绑定用protected $connection,跨库推荐table()而非name()。

ThinkPHP6数据库连接配置核心是明确连接定义位置、保证参数完整、验证生效路径。不依赖环境变量也能跑通,但推荐用.env管理敏感信息;多库、SSL、异构库(如SQL Server、达梦)需额外注意驱动和参数细节。
基础单库配置(推荐 .env + database.php 组合)
优先在项目根目录的 .env 文件中写入:
DB_TYPE=mysqlDB_HOSTNAME=127.0.0.1DB_DATABASE=thinkphpDB_USERNAME=root-
DB_PASSWORD=(留空可不填) DB_HOSTPORT=3306DB_CHARSET=utf8mb4DB_PREFIX=think_
确保 .env 未被 Git 忽略或部署脚本删除。框架会自动读取并覆盖 config/database.php 中同名配置。若禁用 .env,则需在 database.php 的 connections['mysql'] 数组里手动补全全部字段(type、hostname、database、username、password 缺一不可)。
验证是否连通:在控制器中执行 Db::query('SELECT 1'),无异常即成功。
多数据库配置(必须显式定义 + 显式调用)
所有连接必须在 config/database.php 的 connections 数组中完整声明,键名仅支持小写字母+下划线(如 'log_db',不能是 'LogDb' 或 'log.db'):
- 每个连接都要包含
type、hostname、database、username、password、hostport等基础项 -
prefix建议设为空字符串(''),跨库操作时用table('db_name.table')更安全 - 调用时必须显式使用
Db::connect('log_db')->table('event')->select(),不能拆成两行(否则第二行仍走默认库) - 模型绑定指定库:在模型类中加
protected $connection = 'admin_db';,值必须与connections键名完全一致(大小写敏感)
特殊数据库适配要点
不同数据库类型对配置有硬性要求:
-
SQL Server:
type必须为sqlsrv(不是pdo_sqlsrv),hostport显式写1433,不要加dsn字段;中文乱码需确认服务端排序规则与 PHP 传参编码匹配 -
达梦(DM):必须安装对应 PHP 版本的 TS 版扩展(如
php81ts_dm.dll),type设为dm,表名默认大写,charset用UTF-8,且需补全框架缺失的 Builder 类,否则 SQL 语法报错 -
SSL 连接(MySQL):SSL 参数只能写在
params数组里,用 PDO 常量作键名,例如:PDO::MYSQL_ATTR_SSL_CA => '/etc/mysql/ssl/ca.pem'PDO::MYSQL_ATTR_SSL_MODE => PDO::MYSQL_ATTR_SSL_MODE_REQUIRED
证书路径必须是服务器绝对路径,相对路径或 URL 无效
常见误区与避坑提示
这些点容易导致静默失败或查错库:
-
Db::connect()返回的是新实例,不链式调用或不赋值给变量就丢弃了——这是最常翻车的操作 - ThinkPHP6 本身没有真正的连接池;
pool_size等配置只在think-swoole扩展下生效,FPM 模式下只是请求内复用,不跨请求 - 别在
params里盲目加PDO::ATTR_PERSISTENT => true,TP6 的Connection::__destruct()会强制销毁 PDO,实际仍是短连接 - 模型中用
name('user')依赖前缀拼接,跨库场景建议统一用table('user.users')避免污染
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











