ThinkPHP3.2.3数据库设置新特性


Posted in PHP onMarch 05, 2015

ThinkPHP3.2.3版本数据库驱动采用PDO完全重写,配置和使用上面也比之前版本更加灵活和强大,我们来了解下如何使用。

首先,3.2.3的数据库配置信息有所调整,完整的数据库设置包括:

/* 数据库设置 */

 'DB_TYPE'               =>  '',     // 数据库类型

 'DB_HOST'               =>  '', // 服务器地址

 'DB_NAME'               =>  '',          // 数据库名

 'DB_USER'               =>  '',      // 用户名

 'DB_PWD'                =>  '',          // 密码

 'DB_PORT'               =>  '',        // 端口

 'DB_PREFIX'             =>  '',    // 数据库表前缀

 'DB_PARAMS'          =>  array(), // 数据库连接参数

 'DB_DEBUG'  =>  TRUE, // 数据库调试模式 开启后可以记录SQL日志

 'DB_LITE'             =>  false,    // 使用数据库Lite模式

 'DB_FIELDS_CACHE'       =>  true,        // 启用字段缓存

 'DB_CHARSET'            =>  'utf8',      // 数据库编码默认采用utf8

 'DB_DEPLOY_TYPE'        =>  0, // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)

 'DB_RW_SEPARATE'        =>  false,       // 数据库读写是否分离 主从式有效

 'DB_MASTER_NUM'         =>  1, // 读写分离后 主服务器数量

 'DB_SLAVE_NO'           =>  '', // 指定从服务器序号

相对3.2.2版本来说,取消了如下设置参数:

'DB_FIELDTYPE_CHECK' // 3.2.3强制进行字段类型检测了

 'DB_SQL_BUILD_CACHE' // 3.2.3取消了SQL创建缓存

 'DB_SQL_BUILD_QUEUE' // 3.2.3取消了SQL创建缓存

 'DB_SQL_BUILD_LENGTH' // 3.2.3取消了SQL创建缓存

 'DB_SQL_LOG' // 由新增的DB_DEBUG参数取代

 'DB_BIND_PARAM' // 新版采用PDO 自动参数绑定 无需设置

新增的数据库设置参数包括:

'DB_DEBUG'  //用于开启数据库调试模式,开启后即可记录SQL日志

 'DB_LITE' // 是否采用数据库Lite模式连接 开启后只能使用原生SQL查询

3.2.2版本数据库的调试模式和项目的调试模式(由APP_DEBUG常量定义)是绑定的 ,3.2.3版本开始数据库的调试模式是独立设置(由DB_DEBUG参数设置)的。

DB_TYPE参数为数据库类型设置,目前支持的驱动包括mysql/sqlite/oracle/pgsql/sqlsrv/firebird(其他的数据库类型需要增加驱动),设置如下:
'DB_TYPE'=>'mysql', // 不再支持设置为PDO 也不再区分mysql和mysqli
复制代码
数据库的连接信息,主要包括下面参数:

'DB_HOST'               =>  '', // 服务器地址 采用IP地址

 'DB_NAME'               =>  '',          // 数据库名

 'DB_USER'               =>  '',      // 用户名

 'DB_PWD'                =>  '',          // 密码

 'DB_PORT'               =>  '',        // 端口 留空则取默认端口

 'DB_CHARSET'            =>  '',      // 数据库编码

以上设置参数会在实例化PDO的时候自动转换为PDO的连接参数传入。

DB_DSN参数一般无需设置,系统的数据库驱动会进行默认设置,如果需要调整,请遵循PDO的相关数据库连接的DSN设置进行设置。

DB_PARAMS用于设置数据库的连接参数,会传入PDO实例化的第四个参数。

下面是一个典型的数据库全局设置:

'DB_TYPE'               =>  'mysql',     // 数据库类型

 'DB_HOST'               =>  '192.168.1.10', // 服务器地址

 'DB_NAME'               =>  'thinkphp',          // 数据库名

 'DB_USER'               =>  'root',      // 用户名

 'DB_PWD'                =>  '1234',          // 密码

 'DB_PORT'               =>  '3306',        // 端口

 'DB_PREFIX'             =>  'think_',    // 数据库表前缀

 'DB_CHARSET'            =>  'utf8',      // 数据库编码

 'DB_DEBUG'  =>  TRUE, // 数据库调试模式 开启后可以记录SQL日志

如果在模型类中设置单独的数据库连接信息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'  => '192.168.1.10',

        'db_port'  => '3306',

        'db_name'  => 'thinkphp',

        'db_charset' =>    'utf8',

    );

 }

注意:在模型中设置的数据库连接设置参数采用全局配置的小写名。

或者采用字符串方式定义,格式为:
数据库类型://用户名:密码@数据库地址:数据库端口/数据库名#字符集
例如:

//在模型里单独设置数据库连接信息

 namespace Home\Model;

 use Think\Model;

 class UserModel extends Model{

    // 使用字符串方式定义

    protected $connection = 'mysql://root:1234@192.168.1.10:3306/thinkphp#utf8';

 }

也可以通过配置文件设置,例如:

//数据库配置1

 'DB_CONFIG1' => array(

    'db_type'  => 'mysql',

    'db_user'  => 'root',

    'db_pwd'   => '1234',

    'db_host'  => '192.168.1.10',

    'db_port'  => '3306',

    'db_name'  => 'thinkphp',

    'db_charset'=>    'utf8',

 ),

 //数据库配置2

 'DB_CONFIG2' => 'mysql://root:1234@192.168.1.10:3306/thinkphp#utf8';

然后在模型里面定义:

//在模型里单独设置数据库连接信息

 namespace Home\Model;

 use Think\Model;

 class UserModel extends Model{

    //调用配置文件中的数据库配置1

    protected $connection = 'DB_CONFIG1';

    // 或者

    protected $connection = 'DB_CONFIG2';

 }

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

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

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

以上就是本文的全部内容了,希望大家能够喜欢。

PHP 相关文章推荐
php expects parameter 1 to be resource, array given 错误
Mar 23 PHP
非常好用的两个PHP函数 serialize()和unserialize()
Feb 04 PHP
PHP关联数组的10个操作技巧
Jan 21 PHP
基于PHP服务端图片生成缩略图的方法详解
Jun 20 PHP
php中cookie的使用方法
Mar 29 PHP
PHP实现的网站目录扫描索引工具
Sep 08 PHP
基于PHP实现用户注册登录功能
Oct 14 PHP
php获得文件夹下所有文件的递归算法的简单实例
Nov 01 PHP
基于Codeigniter框架实现的student信息系统站点动态发布功能详解
Mar 23 PHP
Windows上php5.6操作mongodb数据库示例【配置、连接、获取实例】
Feb 13 PHP
PHP实现新型冠状病毒疫情实时图的实例
Feb 04 PHP
Yii使用EasyWechat实现小程序获取用户的openID的方法
Apr 29 PHP
ThinkPHP 3.2 版本升级了哪些内容
Mar 05 #PHP
thinkPHP学习笔记之安装配置篇
Mar 05 #PHP
PHP判断浏览器、判断语言代码分享
Mar 05 #PHP
Php-Redis安装测试笔记
Mar 05 #PHP
PHP中文乱码解决方案
Mar 05 #PHP
php判断输入是否是纯数字,英文,汉字的方法
Mar 05 #PHP
PHP使用适合阅读的格式显示文件大小的方法
Mar 05 #PHP
You might like
如何过滤高亮显示非法字符
2006/10/09 PHP
JSON在PHP中的应用介绍
2012/09/08 PHP
PHP中iconv函数转码时截断字符问题的解决方法
2015/01/21 PHP
PHP给文字内容中的关键字进行套红处理
2016/04/12 PHP
深入理解JavaScript系列(9) 根本没有“JSON对象”这回事!
2012/01/15 Javascript
jQuery 获取和设置select下拉框的值实现代码
2013/11/08 Javascript
深入理解Javascript动态方法调用与参数修改的问题
2013/12/10 Javascript
js图片延迟技术一般的思路与示例
2014/03/20 Javascript
JS获取随机数函数可自定义最小值最大值
2014/05/08 Javascript
移动端JQ插件hammer使用详解
2015/07/03 Javascript
javascript HTML+CSS实现经典橙色导航菜单
2016/02/16 Javascript
JavaScript实现两个select下拉框选项左移右移
2017/03/09 Javascript
Node.js 8 中的重要新特性
2017/06/28 Javascript
layer弹出层倒计时关闭的实现方法
2019/09/27 Javascript
[51:28]EG vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/16 DOTA
[01:08:29]DOTA2-DPC中国联赛定级赛 RNG vs Aster BO3第一场 1月9日
2021/03/11 DOTA
python网络编程调用recv函数完整接收数据的三种方法
2017/03/31 Python
python使用os.listdir和os.walk获得文件的路径的方法
2017/12/16 Python
pandas把dataframe转成Series,改变列中值的类型方法
2018/04/10 Python
Python中asyncio与aiohttp入门教程
2018/10/16 Python
浅谈PyTorch的可重复性问题(如何使实验结果可复现)
2020/02/20 Python
python实现将字符串中的数字提取出来然后求和
2020/04/02 Python
详解css3 mask遮罩实现一些特效
2018/10/24 HTML / CSS
Speedo美国:澳大利亚顶尖泳衣制造商
2016/08/03 全球购物
教师自我评价范例
2013/09/24 职场文书
应届大学毕业生找工作的求职信范文
2013/11/29 职场文书
入团者的自我评价分享
2013/12/02 职场文书
奥巴马连任演讲稿
2014/05/15 职场文书
小学教师培训方案
2014/06/09 职场文书
学校党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
作弊检讨书
2015/01/27 职场文书
幼儿园辞职信范文
2015/02/27 职场文书
标准发言稿结尾
2019/07/18 职场文书
2019年度政务公开考核工作总结模板
2019/11/11 职场文书
Vue通过懒加载提升页面响应速度
2021/05/10 Vue.js
总结一下关于在Java8中使用stream流踩过的一些坑
2021/06/24 Java/Android