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+mysql保存和输出文件
Oct 09 PHP
最简单的PHP程序--记数器
Oct 09 PHP
php 远程图片保存到本地的函数类
Dec 08 PHP
深入分析PHP引用(&)
Sep 04 PHP
PHP静态文件生成类实例
Nov 29 PHP
php对关联数组循环遍历的实现方法
Mar 13 PHP
使用PHP uniqid函数生成唯一ID
Nov 18 PHP
Yii中的cookie的发送和读取
Jul 27 PHP
PHP并发查询MySQL的实例代码
Aug 09 PHP
PHP 计算两个特别大的整数实例代码
May 07 PHP
PHP二维索引数组的遍历实例分析【2种方式】
Jun 24 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
Mar 30 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
PHP 模拟登陆MSN并获得用户信息
2009/05/16 PHP
php 静态页面中显示动态内容
2009/08/14 PHP
PHP中对各种加密算法、Hash算法的速度测试对比代码
2014/07/08 PHP
layui数据表格自定义每页条数limit设置
2019/10/26 PHP
JavaScript类和继承 prototype属性
2010/09/03 Javascript
function foo的原型与prototype属性解惑
2010/11/19 Javascript
js汉字转拼音实现代码
2013/02/06 Javascript
浏览器打开层自动缓慢展开收缩实例代码
2013/07/04 Javascript
零基础搭建Node.js、Express、Ejs、Mongodb服务器及应用开发入门
2014/12/20 Javascript
javascript实现继承的简单实例
2015/07/26 Javascript
浅谈使用MVC模式进行JavaScript程序开发
2015/11/10 Javascript
jQuery中cookie插件用法实例分析
2015/12/04 Javascript
javascript模块化简单解析
2016/04/07 Javascript
js实现上传图片预览方法
2016/10/25 Javascript
你可能不知道的前端算法之文字避让(inMap)
2018/01/12 Javascript
vue中如何使用ztree
2018/02/06 Javascript
基于Vue2x实现响应式自适应轮播组件插件VueSliderShow功能
2018/05/16 Javascript
详解使用JWT实现单点登录(完全跨域方案)
2019/08/02 Javascript
python实现的各种排序算法代码
2013/03/04 Python
pandas把dataframe转成Series,改变列中值的类型方法
2018/04/10 Python
python切片及sys.argv[]用法详解
2018/05/25 Python
Python实现定时执行任务的三种方式简单示例
2019/03/30 Python
Python匿名函数/排序函数/过滤函数/映射函数/递归/二分法
2019/06/05 Python
PyQt5重写QComboBox的鼠标点击事件方法
2019/06/25 Python
Python3 pandas 操作列表实例详解
2019/09/23 Python
Python 模拟生成动态产生验证码图片的方法
2020/02/01 Python
pycharm 中mark directory as exclude的用法详解
2020/02/14 Python
Macbook安装Python最新版本、GUI开发环境、图像处理、视频处理环境详解
2020/02/17 Python
浅谈matplotlib 绘制梯度下降求解过程
2020/07/12 Python
基于Django集成CAS实现流程详解
2020/11/28 Python
Sam’s Club山姆会员商店:沃尔玛旗下高端会员制商店
2017/01/16 全球购物
Foot Locker意大利官网:全球领先的运动鞋和服装零售商
2017/05/30 全球购物
科茨沃尔德家居商店:Scotts of Stow
2018/06/29 全球购物
园艺师求职信
2014/03/10 职场文书
VUE中的v-if与v-show区别介绍
2022/03/13 Vue.js