TP5配置使用多个数据库方法
1、修改database.php
// +----------------------------------------------------------------------
return [
'db1' => [
// 数据库类型
'type' => 'mysql',
// 服务器地址
'hostname' => '192.168.1.1',
// 数据库名
'database' => 'db1',
// 用户名
'username' => 'root',
// 密码
'password' => 'password',
// 端口
'hostport' => '3306',
// 连接dsn
'dsn' => '',
// 数据库连接参数
'params' => [],
// 数据库编码默认采用utf8
'charset' => 'utf8',
// 数据库表前缀
'prefix' => 'think_',
// 数据库调试模式
'debug' => true,
// 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
'deploy' => 0,
// 数据库读写是否分离 主从式有效
'rw_separate' => false,
// 读写分离后 主服务器数量
'master_num' => 1,
// 指定从服务器序号
'slave_no' => '',
// 是否严格检查字段是否存在
'fields_strict' => true,
// 数据集返回类型
'resultset_type' => 'array',
// 自动写入时间戳字段
'auto_timestamp' => false,
// 时间字段取出后的默认时间格式
'datetime_format' => 'Y-m-d H:i:s',
// 是否需要进行SQL性能分析
'sql_explain' => false
],
'db2' => [
// 数据库类型
'type' => 'mysql',
// 服务器地址
'hostname' => '222.7.2.2',
// 数据库名
'database' => 'db2',
// 用户名
'username' => 'root',
// 密码
'password' => 'password',
// 端口
'hostport' => '3306',
// 连接dsn
'dsn' => '',
// 数据库连接参数
'params' => [],
// 数据库编码默认采用utf8
'charset' => 'utf8',
// 数据库表前缀
'prefix' => 'big_',
// 数据库调试模式
'debug' => true,
// 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
'deploy' => 0,
// 数据库读写是否分离 主从式有效
'rw_separate' => false,
// 读写分离后 主服务器数量
'master_num' => 1,
// 指定从服务器序号
'slave_no' => '',
// 是否严格检查字段是否存在
'fields_strict' => true,
// 数据集返回类型
'resultset_type' => 'array',
// 自动写入时间戳字段
'auto_timestamp' => false,
// 时间字段取出后的默认时间格式
'datetime_format' => 'Y-m-d H:i:s',
// 是否需要进行SQL性能分析
'sql_explain' => false,
],
];
2、修改db.php 路径: thinkphp/think/libary/db.php
修改connect方法
添加代码:
public static $config_db=[];
if(!empty($config))
{
self::$config_db = $config;
}
if(empty($config) && !empty(self::$config_db))
{
$config = self::$config_db;
}
/**
* @var int 执行次数
*/
public static $executeTimes = 0;
public static $config_db=[];
/**
* 数据库初始化,并取得数据库类实例
* @access public
* @param mixed $config 连接配置
* @param bool|string $name 连接标识 true 强制重新连接
* @return Connection
* @throws Exception
*/
public static function connect($config = [], $name = false)
{
if(!empty($config))
{
self::$config_db = $config;
}
if(empty($config) && !empty(self::$config_db))
{
$config = self::$config_db;
}
if (false === $name) {
$name = md5(serialize($config));
}
if (true === $name || !isset(self::$instance[$name])) {
// 解析连接参数 支持数组和字符串
$options = self::parseConfig($config);
if (empty($options['type'])) {
throw new \InvalidArgumentException('Undefined db type');
}
$class = false !== strpos($options['type'], '\\') ?
$options['type'] :
'\\think\\db\\connector\\' . ucwords($options['type']);
// 记录初始化信息
if (App::$debug) {
Log::record('[ DB ] INIT ' . $options['type'], 'info');
}
if (true === $name) {
$name = md5(serialize($config));
}
self::$instance[$name] = new $class($options);
}
return self::$instance[$name];
}
3、使用构造函数,正常使用,语法不变
class Detect extends Controller
{
public function __construct()
{
Db::$config_db=config("database.db1");
}
/**
*
* 6、提交测评接口
* 本接口用于提交测评
*/
public function add()
{
$userId = session('userId'); //获取session
if ($userId == "") {
return array("status" => '1', 'error' => ['请登录']);
}
$id = input('post.fileId'); //文件ID
$result = Db::field('id,file_name,app_name,version,size,path')
->table(['app_file' => 'file'])
->where('file.id', $id)
->find();
print_r($result);
}
4、其他应用模块(application2)使用
class User extends Controller
{
public function __construct()
{
$db = include $file = "../honor/database.php";
Db::$config_db = $db['db1'];
}
/**
* 1、用户基本信息
*/
public function userDetail()
{
$userId = session('userId'); //获取session
if ($userId == "") {
exit(json_encode(array("status" => '1', 'error' => ['用户信息未找到'])));
}
$result = Db::field('user.user_name userName,user.head,user.mobile,user.email')
->table(['t_user' => 'user'])
->where('user.id', $userId)
->where('user.status', '0')
->find();
if ($result) {
exit(json_encode(array("status" => '0', 'data' => $result)));
} else {
exit(json_encode(array("status" => '1', 'error' => ['用户信息未找到'])));
}
}
}
(完)