thinkphp可以单独配置新数据库吗

发布时间 - 2022-12-13 00:00:00    点击率:
thinkphp可以单独配置新数据库,其设置方法是:1、在应用配置文件或者模块配置文件中添加配置参数如“'DB_HOST' => 'localhost'...”;2、在不同的应用状态的配置文件里面定义独立的数据库配置信息;3、在实例化的时候指定数据库连接信息,语法如“$User = M('User','other_','mysql://root...”。

本教程操作环境:Windows7系统、ThinkPHP5版、Dell G3电脑。

thinkphp可以单独配置新数据库吗?

可以。

Thinkphp 模型-连接数据库独立配置model数据库连接

连接数据库

ThinkPHP内置了抽象数据库访问层,把不同的数据库操作封装起来,我们只需要使用公共的Db类进行操作,而无需针对不同的数据库写不同的代码和底层实现,Db类会自动调用相应的数据库驱动来处理。目前的数据库包括Mysql、SqlServer、PgSQL、Sqlite、Oracle、Ibase、Mongo,也包括对PDO的支持。

如果应用需要使用数据库,必须配置数据库连接信息,数据库的配置文件有多种定义方式。

一、全局配置定义

常用的配置方式是在应用配置文件或者模块配置文件中添加下面的配置参数:

//数据库配置信息'DB_TYPE' => 'mysql', // 数据库类型
'DB_HOST' => 'localhost', // 服务器地址
'DB_NAME' => 'thinkphp', // 数据库名
'DB_USER' => 'root', // 用户名
'DB_PWD' => '123456', // 密码
'DB_PORT' => 3306, // 端口
'DB_PREFIX' => 'think_', // 数据库表前缀
'DB_CHARSET'=> 'utf8', // 字符集

数据库的类型由DB_TYPE参数设置。

下面是目前支持的数据库设置: 

如果DB_TYPE使用PDO类型的话,数据库类型则由DB_DSN配置决定。

或者采用如下配置

'DB_DSN' => 'mysql://root:123456@localhost:3306/thinkphp#utf8'

使用DB_DSN方式定义可以简化配置参数,DSN参数格式为:

数据库类型://用户名:密码@数据库地址:数据库端口/数据库名#字符集

字符集设置需要3.2.1版本以上有效,字符集如果没有设置的话,默认为utf8。

如果两种配置参数同时存在的话,DB_DSN配置参数优先。

注意:如果要设置分布式数据库,暂时不支持DB_DSN方式配置。

如果采用PDO驱动的话,则必须首先配置**DB_TYPE **为pdo,然后还需要单独配置其他参数,例如:

//PDO连接方式
'DB_TYPE' => 'pdo', // 数据库类型
'DB_USER' => 'root', // 用户名
'DB_PWD' => '', // 密码
'DB_PREFIX' => 'think_', // 数据库表前缀
'DB_DSN' => 'mysql:host=localhost;dbname=thinkphp;charset=UTF-8'

注意:PDO方式的DB_DSN配置格式有所区别,根据不同的数据库类型设置有所不同,具体可以参考PHP手册。

配置文件定义的数据库连接信息一般是系统默认采用的,因为一般一个应用的数据库访问配置是相同的。该方法系统在连接数据库的时候会自动获取,无需手动连接。

可以对每个模块定义不同的数据库连接信息,如果开启了调试模式的话,还可以在不同的应用状态的配置文件里面定义独立的数据库配置信息。

二、模型类定义

如果在某个模型类里面定义了connection属性的话,则实例化该自定义模型的时候会采用定义的数据库连接信息,而不是配置文件中设置的默认连接信息,通常用于某些数据表位于当前数据库连接之外的其它数据库,例如:

//在模型里单独设置数据库连接信息
namespace Home\ Model;
use Think\ Model;
class UserModel extends Model{
protected $connection = array(
'db_type' => 'mysql',
'db_user' => 'root',
'db_pwd' => '1234',
'db_host' => 'localhost',
'db_port' => '3306',
'db_name' => 'thinkphp',
'db_charset' => 'utf8',
);
}

 也可以采用DSN方式定义,例如:

//在模型里单独设置数据库连接信息
namespace Home\ Model;
use Think\ Model;
class UserModel extends Model{
//或者使用DSN定义
protected $connection = 'mysql://root:1234@localhost:3306/thinkphp#utf8';
}

 

 如果我们已经在配置文件中配置了额外的数据库连接信息,例如:

//数据库配置1
'DB_CONFIG1' => array(
'db_type' => 'mysql',
'db_user' => 'root',
'db_pwd' => '1234',
'db_host' => 'localhost',
'db_port' => '3306',
'db_name' => 'thinkphp',
'db_charset'=> 'utf8',
),
//数据库配置2
'DB_CONFIG2' => 'mysql://root:1234@localhost:3306/thinkphp#utf8';

 那么,我们可以把模型类的属性定义改为:

//在模型里单独设置数据库连接信息
namespace Home\ Model;
use Think\ Model;
class UserModel extends Model{
//调用配置文件中的数据库配置1
protected $connection = 'DB_CONFIG1';
}
//在模型里单独设置数据库连接信息
namespace Home\ Model;
use Think\ Model;
class InfoModel extends Model{
//调用配置文件中的数据库配置1
protected $connection = 'DB_CONFIG2';
}

三、实例化定义

除了在模型定义的时候指定数据库连接信息外,我们还可以在实例化的时候指定数据库连接信息,例如:如果采用的是M方法实例化模型的话,也可以支持传入不同的数据库连接信息,例如:

$User = M('User','other_','mysql://root:1234@localhost/demo#utf8');

表示实例化User模型,连接的是demo数据库的other_user表,采用的连接信息是第三个参数配置的。如果我们在项目配置文件中已经配置了DB_CONFIG2的话,也可以采用:

$User = M('User','other_','DB_CONFIG2');

  需要注意的是,ThinkPHP的数据库连接的惰性的,所以并不是在实例化的时候就连接数据库,而是在有实际的数据操作的时候才会去连接数据库(额外的情况是,在系统第一次实例化模型的时候,会自动连接数据库获取相关模型类对应的数据表的字段信息)。

推荐学习:《thinkPHP视频教程》


# thinkphp  # php  # mysql  # 分布式  # 封装  # pdo  # sqlite  # oracle  # sqlserver  # 数据库  # 配置文件  # 的是  # 连接数据库  # 是在  # 还可以  # 两种  # 我们可以  # 有所不同  # 如果没有  # 自定义 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  桂林网站制作公司有哪些,桂林马拉松怎么报名?  Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程  如何在七牛云存储上搭建网站并设置自定义域名?  轻松掌握MySQL函数中的last_insert_id()  详解vue.js组件化开发实践  微信小程序 wx.uploadFile无法上传解决办法  Laravel Docker环境搭建教程_Laravel Sail使用指南  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  制作旅游网站html,怎样注册旅游网站?  音乐网站服务器如何优化API响应速度?  HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】  Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】  Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布  CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】  javascript中数组(Array)对象和字符串(String)对象的常用方法总结  Laravel安装步骤详细教程_Laravel环境搭建指南  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法  如何实现javascript表单验证_正则表达式有哪些实用技巧  如何构建满足综合性能需求的优质建站方案?  详解jQuery中的事件  深入理解Android中的xmlns:tools属性  如何快速搭建高效服务器建站系统?  如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  Laravel Blade模板引擎语法_Laravel Blade布局继承用法  如何在不使用负向后查找的情况下匹配特定条件前的换行符  百度浏览器网页无法复制文字怎么办 百度浏览器复制修复  Laravel如何实现本地化和多语言支持?(i18n教程)  Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全  如何快速搭建二级域名独立网站?  详解Android——蓝牙技术 带你实现终端间数据传输  七夕网站制作视频,七夕大促活动怎么报名?  iOS验证手机号的正则表达式  魔方云NAT建站如何实现端口转发?  Laravel怎么实现支付功能_Laravel集成支付宝微信支付  Laravel如何使用Blade组件和插槽?(Component代码示例)  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  如何在搬瓦工VPS快速搭建网站?  Laravel如何创建自定义Facades?(详细步骤)  C++时间戳转换成日期时间的步骤和示例代码  常州企业网站制作公司,全国继续教育网怎么登录?  php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】  微信小程序 HTTPS报错整理常见问题及解决方案  简单实现Android文件上传  MySQL查询结果复制到新表的方法(更新、插入)  如何用西部建站助手快速创建专业网站?  浅谈redis在项目中的应用  详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南