插件窝 干货文章 thinkphp5多数据库配置介绍

thinkphp5多数据库配置介绍

amp 39 配置 gt 787    来源:    2024-10-28

ThinkPHP遵循惯例重于配置的原则,系统会按照下面的顺序来加载配置文件(配置的优先顺序从右到左)。

惯例配置->应用配置->模块配置->动态配置

惯例配置:核心框架内置的配置文件,无需更改。

应用配置:每个应用的全局配置文件(框架安装后会生成初始的应用配置文件),有部分配置参数仅能在应用配置文件中设置。

立即学习“PHP免费学习笔记(深入)”;

模块配置:每个模块的配置文件(相同的配置参数会覆盖应用配置),有部分配置参数模块配置是无效的,因为已经使用过。

动态配置:主要是指在控制器或者行为中进行(动态)更改配置,该配置方式只在当次请求有效,因为不会保存到配置文件中。

TP5.1的数据库配置文件在application\config\database.php中

当然,在application\模块名\config\database.php(模块配置)中的配置,优先级会比在application\config\database.php(应用配置)中高

比如同时在模块配置和在应用配置中配置数据库连接,那么会优先使用模块配置,如果模块配置中没有,那么会去找应用配置中的配置信息。动态配置的优先级最高。

我们只需要在控制器和数据库配置文件中操作即可,无需用到模型

<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
 
return [
    // 数据库类型
    &#39;type&#39;            => &#39;mysql&#39;,
    // 服务器地址
    &#39;hostname&#39;        => &#39;127.0.0.1&#39;,
    // 数据库名
    &#39;database&#39;        => &#39;&#39;,
    // 用户名
    &#39;username&#39;        => &#39;root&#39;,
    // 密码
    &#39;password&#39;        => &#39;&#39;,
    // 端口
    &#39;hostport&#39;        => &#39;&#39;,
    // 连接dsn
    &#39;dsn&#39;             => &#39;&#39;,
    // 数据库连接参数
    &#39;params&#39;          => [],
    // 数据库编码默认采用utf8
    &#39;charset&#39;         => &#39;utf8&#39;,
    // 数据库表前缀
    &#39;prefix&#39;          => &#39;&#39;,
    // 数据库调试模式
    &#39;debug&#39;           => true,
    // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
    &#39;deploy&#39;          => 0,
    // 数据库读写是否分离 主从式有效
    &#39;rw_separate&#39;     => false,
    // 读写分离后 主服务器数量
    &#39;master_num&#39;      => 1,
    // 指定从服务器序号
    &#39;slave_no&#39;        => &#39;&#39;,
    // 自动读取主库数据
    &#39;read_master&#39;     => false,
    // 是否严格检查字段是否存在
    &#39;fields_strict&#39;   => true,
    // 数据集返回类型
    &#39;resultset_type&#39;  => &#39;array&#39;,
    // 自动写入时间戳字段
    &#39;auto_timestamp&#39;  => false,
    // 时间字段取出后的默认时间格式
    &#39;datetime_format&#39; => &#39;Y-m-d H:i:s&#39;,
    // 是否需要进行SQL性能分析
    &#39;sql_explain&#39;     => false,
    // Builder类
    &#39;builder&#39;         => &#39;&#39;,
    // Query类
    &#39;query&#39;           => &#39;\\think\\db\\Query&#39;,
    // 是否需要断线重连
    &#39;break_reconnect&#39; => false,
    // 断线标识字符串
    &#39;break_match_str&#39; => [],
    &#39;db_config1&#39;      => [
        // 数据库类型
        &#39;type&#39;            => &#39;sqlsrv&#39;,
        // 服务器地址
        &#39;hostname&#39;        => &#39;192.168.1.1&#39;,
        // 用户名
        &#39;username&#39;        => &#39;username&#39;,
        // 密码
        &#39;password&#39;        => &#39;passwd&#39;,
        // 数据库名称
        &#39;database&#39;        => &#39;dbname&#39;,
    ],
    &#39;db_config2&#39;      => [
        // 数据库类型
        &#39;type&#39;            => &#39;mysql&#39;,
        // 服务器地址
        &#39;hostname&#39;        => &#39;192.168.1.2&#39;,
        // 用户名
        &#39;username&#39;        => &#39;username&#39;,
        // 密码
        &#39;password&#39;        => &#39;passwd&#39;,
        // 数据库名称
        &#39;database&#39;        => &#39;dbname&#39;,
    ]
];

db_config1和db_config2可以看作是两个不同的数据库连接

我们在控制器中就可以这样调用不同的数据库

<?php
use think\Db;
$verify1 = Db::connect(&#39;db_config1&#39;)->table(&#39;tablename&#39;)->where([
   [&#39;username&#39;,&#39;=&#39;,$username],
   [&#39;password&#39;,&#39;=&#39;,$password],
])->find();
 
$verify2 = Db::connect(&#39;db_config2&#39;)->table(&#39;tablename&#39;)->where([
   [&#39;username&#39;,&#39;=&#39;,$username],
   [&#39;password&#39;,&#39;=&#39;,$password],
])->find();

推荐教程:《thinkphp/" target="_blank">TP5》