ThinkPHP 项目搭建完成后,数据库配置是启动数据操作的第一步,也是绕不开的一步。核心其实很简单:把连接参数填对,让框架知道该连哪个库、用什么账号、怎么连。不同版本(比如 TP5.x 和 TP6.x)路径和写法略有差异,但逻辑完全一致——无非就是告诉框架“数据库类型、地址、名称、账号密码”这几个关键信息。

确认数据库服务已就绪
在动手配置之前,先确认三件事是不是已经到位:
- MySQL(或其他数据库)服务正在运行。不管是通过 phpStudy、XAMPP 还是 Docker 启动的,只要服务没起来,配置啥都白搭。
- 目标数据库已经创建好了(比如 thinkphp_db)。字符集建议选 utf8mb4,排序规则用 utf8mb4_unicode_ci,这样存储 emoji 和特殊字符都不会出问题。
- 有可用的数据库账号和密码。推荐使用非 root 账号,权限只要对目标库具备 SELECT/INSERT/UPDATE/DELETE 就够了,避免权限过大带来的安全风险。
编辑 database.php 配置文件
这是最常用也最推荐的方式,无论是单库还是主从结构都能搞定。文件路径根据版本略有不同:
- TP6.x 路径:
config/database.php(项目根目录下的 config 文件夹) - TP5.x 路径:
application/database.php
打开文件后,会看到一个返回关联数组的配置项。需要填写的字段包括:
type → 数据库类型,比如 'mysql'(也支持 pgsql、sqlite、sqlsrv、oracle 等);
hostname → 数据库服务器地址,本地开发通常用 '127.0.0.1' 或 'localhost';
database → 数据库名,例如 'thinkphp_db';
username → 登录用户名,比如 'root';
password → 对应的密码;
hostport → 端口号,MySQL 默认是 '3306';
charset → 字符编码,强烈建议设为 'utf8mb4',避免 emoji 存储异常;
prefix → 表前缀,如 'tp_',模型中未指定表名时会自动添加前缀;
auto_timestamp → 可设为 true,启用后新增/更新时自动写入 create_time 和 update_time 字段。
这些字段缺一不可,尤其是 hostname、database、username、password 这几个,一旦写错,连库都连不上。
验证配置是否生效
配置保存后,别急着往下写业务代码,先跑个简单查询验证一下连接是否成功:
- 在控制器中引入 Db 类:
use think\facade\Db; - 执行一条基础查询:
Db::query('SELECT VERSION()');或Db::table('user')->find(); - 如果返回结果没有报错(比如看到了 MySQL 版本号或用户数据),说明配置已经生效,连接成功。
- 如果报错提示“Connection refused”或“Access denied”,回过头检查 hostname、端口、账号密码、数据库是否存在、防火墙设置等。最常见的问题就是账号密码输错,或者数据库名写错了。
进阶:多库配置与动态切换
当项目需要同时访问多个数据库(比如用户库和日志库分开),可以在 database.php 中定义 connections 数组:
- 每个子数组代表一个独立的连接,例如
'log_db'和'user_db'。 - 使用时通过
Db::connect('log_db')获取对应实例,再调用->name('log')->select()即可。 - 也可以结合 .env 文件管理不同环境的参数,比如在 .env 中写
DATABASE2_HOSTNAME=192.168.1.100,然后在配置中用env('database2.hostname')读取,这样多环境切换起来非常方便。