ThinkPHP5如何连接数据库_ThinkPHP5连接数据库配置【详解】
ThinkPHP5连接数据库需将配置文件置于application/database.php,type、hostname等参数不可缺漏。Db::connect()传参必须为配置键名或完整数组。模型类$connection属性为静态快照,不支持动态切换。DSN方式无法设置prefix、params等参数,密码含特殊字符需URL编码,生产环境应谨慎使用。
ThinkPHP5 连接数据库这件事,表面上看是“配个文件就能跑”,实际上不少人栽在配置位置放错、参数写漏、或者传参方式不对上。下面把几种常见场景拆开说,踩过的坑一次填平。

先说一个核心判断:数据库连不上,多半不是框架的问题,而是配置与使用场景没对上。文件的位置没放对,里面字段不齐全,写错了键名——这三项里只要中一个,连不上就是正常的。
database.php 配置文件怎么写才生效
这个文件必须放在 application/database.php(或者模块级目录 application/admin/database.php),返回一个数组。注意,改 config.php 里的数据库字段是没用的,框架根本不认。
type必须显式声明,比如'type' => 'mysql'。漏写了会导致框架用 MySQL 驱动去解析 PostgreSQL 配置,然后报Class 'PDO' not found——这其实是驱动不匹配,不是 PDO 扩展没装。hostname、database、username、password四个字段是可一个都不能缺的。空字符串也会导致连接失败,这点在本地调试时尤其容易忽略。params里如果想启用长连接,要加上PDO::ATTR_PERSISTENT => true,但要注意:PHP-FPM 环境下长连接可能引发连接复用问题,生产环境建议谨慎。- 调试模式下把
debug => true打开,日志里能看到完整的 SQL 语句和连接耗时,开发期建议保持开启。
Db::connect() 传参传什么、不传什么
Db::connect() 的参数既不是数据库名,也不是模型名,而是配置键名或者完整配置数组。传错了是连不上的最常见原因,没有之一。
- 传字符串:必须是
database.php中定义的键名,例如Db::connect('mysql_read')。键名只支持小写+下划线,'mysql.read'或'MysqlRead'都会报Connection not found: xxx。 - 传数组:直接传配置数组,绕开
database.php,适合临时切换或调试。比如Db::connect(['type'=>'sqlite','database'=>'/tmp/test.db'])。 - 绝对不要传:
Db::connect('User')、Db::connect('app_main')、Db::connect('default')——除非你确实在配置里写了叫default的键。 - 它返回的是全新的
Query实例,不影响全局默认连接。每次要用,都得重新调用一次,不是“连一次就行”。
模型类里 $connection 属性为什么没生效
protected $connection = 'mysql_read'; 只在模型第一次实例化时读取一次,后续即使改了配置、重载了 config 文件,这个值也不会刷新。它不是动态绑定,而是静态快照。
- 适用于固定归属某库的模型,比如日志表永远走
log_db。但不适合运行时按条件切换连接。 - 如果想让模型支持多库动态路由,需要在查询前手动调用
Db::connect($connKey)再链式操作,不能依赖$connection。 - 注意:该属性只对继承
\think\Model的类有效;原生Db类操作不受影响。
DSN 字符串方式有哪些限制
用 Db::connect('mysql://root:pass@127.0.0.1:3306/mydb#utf8') 是最简洁的方式,但简洁背后有代价——很多关键参数无法通过 DSN 表达。
- 不支持设置
prefix(表前缀)、params(PDO 参数)、resultset_type等字段。 - 编码只能写在
#utf8后缀,不能写成?charset=utf8,否则解析会失败。 - 密码里如果包含特殊字符(比如
@、/)必须做 URL 编码,不然 DSN 解析阶段就会被截断。 - 生产环境慎用 DSN 方式。敏感信息明文暴露在代码中,容易被误提交到 Git,这是不少项目爆出数据库密码泄漏的原因。
说到底,真正麻烦的从来不是“怎么连上”,而是连上之后连接没有复用、主从没有分离、读写没有隔离——这些细节都藏在 type、rw_separate、write_master 这几个字段里。漏掉一个,就可能把读请求打到了主库上。这也是为什么不少老项目跑着跑着数据库就挂了,配置看起来都对,但主从分离的字段没配全。
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















