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环境搭建最新方法
Sep 05 PHP
Ajax+PHP边学边练 之五 图片处理
Dec 03 PHP
php数组函数序列之ksort()对数组的元素键名进行升序排序,保持索引关系
Nov 02 PHP
php验证手机号码(支持归属地查询及编码为UTF8)
Feb 01 PHP
VB中的RasEnumConnections函数返回632错误解决方法
Jul 29 PHP
利用PHP函数计算中英文字符串长度的方法
Nov 11 PHP
ThinkPHP实现动态包含文件的方法
Nov 29 PHP
php链表用法实例分析
Jul 09 PHP
php验证码生成器
May 24 PHP
PHP简单计算两个时间差的方法示例
Jun 20 PHP
PHP PDO数据库操作预处理与注意事项
Mar 16 PHP
thinkPHP5框架路由常用知识点汇总
Sep 15 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实现采集程序原理和简单示例代码
2007/03/18 PHP
深入PHP中慎用双等于(==)的详解
2013/06/06 PHP
php判断电脑访问、手机访问的例子
2014/05/10 PHP
php实现上传图片保存到数据库的方法
2015/02/11 PHP
PHP实现导出excel数据的类库用法示例
2016/10/15 PHP
golang 调用 php7详解及实例
2017/01/04 PHP
PHP使用Redis实现防止大并发下二次写入的方法
2017/10/09 PHP
laravel 实现上传图片到本地和前台访问示例
2019/10/21 PHP
JavaScript 学习笔记(五)
2009/12/31 Javascript
第一次接触JS require.js模块化工具
2016/04/17 Javascript
浅析BootStrap模态框的使用(经典)
2016/04/29 Javascript
javascript实现粘贴qq截图功能(clipboardData)
2016/05/29 Javascript
BootStrap创建响应式导航条实例代码
2016/05/31 Javascript
jQuery双向列表选择器select版
2016/11/01 Javascript
Bootstrap php制作动态分页标签
2016/12/23 Javascript
JS实现全屏的四种写法
2016/12/30 Javascript
JQuery异步提交表单与文件上传功能示例
2017/01/12 Javascript
JavaScript实现浅拷贝与深拷贝的方法分析
2018/07/05 Javascript
JS中DOM元素的attribute与property属性示例详解
2018/09/04 Javascript
小程序组件之仿微信通讯录的实现代码
2018/09/12 Javascript
浅析vue插槽和作用域插槽的理解
2019/04/22 Javascript
python结合shell查询google关键词排名的实现代码
2016/02/27 Python
python+matplotlib绘制旋转椭圆实例代码
2018/01/12 Python
对python实现二维函数高次拟合的示例详解
2018/12/29 Python
使用pygame编写Flappy bird小游戏
2020/03/14 Python
python datetime时间格式的相互转换问题
2020/06/11 Python
Python执行时间的几种计算方法
2020/07/31 Python
生物化学研究助理员求职信
2013/10/09 职场文书
创业计划书模版
2014/02/05 职场文书
幼儿园大班开学教师寄语
2014/04/03 职场文书
篮球友谊赛通讯稿
2014/10/10 职场文书
2014年银行客户经理工作总结
2014/11/12 职场文书
高中升旗仪式主持词
2015/07/03 职场文书
2016年春季运动会广播稿
2015/08/19 职场文书
土木工程生产实习心得体会
2016/01/22 职场文书
与Windows10相比Windows11有哪些改进?值不值得升级?
2021/11/21 数码科技