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 相关文章推荐
用session做客户验证时的注意事项
Oct 09 PHP
php的日期处理函数及uchome的function_coomon中日期处理函数的研究
Jan 12 PHP
9个PHP开发常用功能函数小结
Jul 15 PHP
php $_SERVER windows系统与linux系统下的区别说明
Feb 14 PHP
PHP学习笔记(二):变量详解
Apr 17 PHP
php+mysql实现简单的增删改查功能
Jul 13 PHP
PHP实现的简单缓存类
Jul 29 PHP
WordPress中用于获取文章作者与分类信息的方法整理
Dec 17 PHP
PHP获取访问页面HTTP状态码的实现代码
Nov 03 PHP
PHP将字符串首字母大小写转换的实例
Jan 21 PHP
php使用socket调用http和smtp协议实例小结
Jul 26 PHP
Laravel 之url参数,获取路由参数的例子
Oct 21 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
PHP数组遍历知识汇总(包含遍历方法、数组指针操作函数、数组遍历测速)
2014/07/05 PHP
PHP SPL标准库之数据结构栈(SplStack)介绍
2015/05/12 PHP
分享PHP源码批量抓取远程网页图片并保存到本地的实现方法
2015/12/01 PHP
PHP简单实现数字分页功能示例
2016/08/24 PHP
有一段有意思的代码-javascript现实多行信息
2007/08/26 Javascript
JavaScript自定义DateDiff函数(兼容所有浏览器)
2012/03/01 Javascript
EASYUI TREEGRID异步加载数据实现方法
2012/08/22 Javascript
IE浏览器IFrame对象内存不释放问题解决方法
2014/08/22 Javascript
Jquery设置attr的disabled属性控制某行显示或者隐藏
2014/09/25 Javascript
js判断浏览器版本以及浏览器内核的方法
2015/01/20 Javascript
表单验证插件Validation应用的实例讲解
2015/10/10 Javascript
js图片轮播手动切换效果
2015/11/10 Javascript
JS如何判断是否为ie浏览器的方法(包括IE10、IE11在内)
2015/12/13 Javascript
基于jquery实现瀑布流布局
2020/06/28 Javascript
JS对象是否拥有某属性如何判断
2017/02/03 Javascript
js实现文本上下来回滚动
2017/02/03 Javascript
基于vue.js快速搭建图书管理平台
2017/10/29 Javascript
解决vue select当前value没有更新到vue对象属性的问题
2018/08/30 Javascript
Jquery实现无缝向上循环滚动列表的特效
2019/02/13 jQuery
NodeJs之word文件生成与解析的实现代码
2019/04/01 NodeJs
React-redux实现小案例(todolist)的过程
2019/09/29 Javascript
vue-cli+webpack项目打包到服务器后,ttf字体找不到的解决操作
2020/08/28 Javascript
Python语言编写电脑时间自动同步小工具
2013/03/08 Python
python查找指定文件夹下所有文件并按修改时间倒序排列的方法
2018/10/21 Python
PyQt5实现简单数据标注工具
2019/03/18 Python
Python hashlib常见摘要算法详解
2020/01/13 Python
新手常见Python错误及异常解决处理方案
2020/06/18 Python
Python和Bash结合在一起的方法
2020/11/13 Python
豆腐の盛田屋官网:日本自然派的豆乳面膜、肥皂、化妆水、乳液等
2016/10/08 全球购物
英国婴儿产品专家:Samuel Johnston
2020/04/20 全球购物
*p++ 自增p 还是p所指向的变量
2016/07/16 面试题
用C或者C++语言实现SOCKET通信
2015/02/24 面试题
《台湾的蝴蝶谷》教学反思
2014/02/20 职场文书
新学期国旗下演讲稿
2014/05/08 职场文书
物流管理专业自荐信
2014/06/23 职场文书
2016年9月份红领巾广播稿
2015/12/21 职场文书