跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

ThinkPHP如何配置数据库连接_数据库连接配置方法【教程】

ThinkPHP数据库连接失败时,可通过五种方式配置:一、标准config/database.php文件配置;二、Db::connect()传数组;三、DSN字符串;四、config.php中定义二级配置;五、database.php预设多连接并动态切换。 如果您在ThinkPHP项目中无法正常访问数据库,则可能是由于
database.php
配置项缺失、参数错误或路径未生效导致连接初始化失败。以下是配置数据库连接的多种可行方法: 一、通过 config/database. php 文件配置主连接 此方式为最常用且推荐的标准配置路径,适用于单数据库或主从结构的基础场景。配置将被框架自动加载,无需手动调用连接初始化。 1、定位并编辑 application/config/database.php (ThinkPHP 6+)或 config/database.php (ThinkPHP 5.x)文件。 2、确保返回数组中包含必需字段: 'type' 、 'hostname' 、 'database' 、 'username' 、 'password' ,其他如 'charset' 和 'prefix' 建议显式声明。 立即学习 “ PHP免费学习笔记(深入) ”; 3、示例配置内容如下:
return [
  'type' => 'mysql',
  'hostname' => '127.0.0.1',
  'database' => 'thinkphp_db',
  'username' => 'root',
  'password' => '123456',
  'hostport' => '3306',
  'charset' => 'utf8mb4',
  'prefix' => 'tp_',
];
二、使用 Db::connect() 方法传入数组配置 该方式适用于临时切换或按需建立独立连接,不依赖全局配置文件,适合多租户、动态库名等运行时场景。 1、在控制器或服务类中引入 think\facade\Db 类。 2、调用 Db::connect($config) 并传入完整连接数组,键名必须与配置文件字段一致(如 'hostname' 而非 'host' )。 3、示例代码如下:
$customDb = Db::connect([
  'type' => 'mysql',
  'hostname' => '192.168.2.100',
  'database' => 'report_db',
  'username' => 'rep_user',
  'password' => 'secure_pass',
  'charset' => 'utf8',
]);
4、后续操作直接使用该实例,例如: $customDb->name('log')->select() 。 三、通过 DSN 字符串方式连接 DSN 方式允许将全部连接信息压缩为单字符串,便于环境隔离或快速测试,但不支持 params 等高级参数嵌套定义。 PHP 8.5.5 PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。 下载 1、构造标准 DSN 格式: mysql://用户名:密码@主机:端口/数据库名#编码 ,注意不能含空格或特殊符号。 2、确保用户名与密码中若含特殊字符(如 / 、 @ 、 : ),需进行 urlencode() 编码。 3、调用 Db::connect($dsn) ,例如:
$dsn = 'mysql://root%3Apass%40123@127.0.0.1%3A3306/myapp#utf8mb4';
$db = Db::connect($dsn);
四、在 config.php 中定义二级数据库配置项 该方式适用于需复用同一套配置逻辑但又需区分用途(如日志库、统计库)的场景,避免重复维护多个 database.php 文件。 1、在 config.php 中新增自定义键,例如 'extra_db_config' ,其值为完整数据库配置数组。 2、确保该配置项与
database.php
结构完全一致,包括所有必需字段和嵌套层级。 3、在业务代码中通过 Db::connect(config('extra_db_config')) 获取连接实例。 4、注意:该方式要求 config() 函数已加载对应配置,不可在配置加载前调用。 五、配置多数据库连接并动态切换 当项目需同时操作多个物理数据库(如读写分离、分库分表)时,必须在
database.php
中预设多个唯一键名连接,并通过 Db::connect() 显式指定键名调用。 1、在
database.php
的返回数组中定义多个连接,键名仅允许小写字母、下划线和数字,**禁止点号与大写字母**,例如: 'mysql_master' 、 'pgsql_log' 。 2、每个连接必须显式声明 'type' ,否则框架会以默认 mysql 解析,导致 PostgreSQL 连接报错 Class 'PDO' not found 。 3、示例多连接片段:
'mysql_master' => [
  'type' => 'mysql',
  'hostname' => '192.168.1.10',
  'database' => 'main_db',
  'username' => 'master_user',
  'password' => 'mypass',
],
'mysql_slave' => [
  'type' => 'mysql',
  'hostname' => '192.168.1.11',
  'database' => 'main_db',
  'username' => 'slave_ro',
  'password' => 'ro_pass',
],
4、运行时切换连接: Db::connect('mysql_slave') 返回只读连接对象, Db::connect('mysql_master') 返回可写连接对象。

相关文章