ThinkPHP连接数据库的方式汇总


Posted in PHP onDecember 05, 2014

本文实例汇总了ThinkPHP连接数据库的几种常用方式。分享给大家供大家参考。具体如下:

ThinkPHP内置了抽象数据库访问层,把不同的数据库操作封装起来,我们只需要使用公共的Db类进行操作,而无需针对不同的数据库写不同的代码和底层实现,Db类会自动调用相应的数据库适配器来处理,目前的数据库包括Mysql、MsSQL、PgSQL、Sqlite、Oracle、Ibase以及PDO的支持,如果应用需要使用数据库,必须配置数据库连接信息,数据库的配置文件有多种定义方式:

第一种:在项目配置文件里面定义

return array(  

'DB_TYPE'=> 'mysql',   

'DB_HOST'=> 'localhost',  

'DB_NAME'=>'thinkphp',   

'DB_USER'=>'root',   

'DB_PWD'=>'',   

'DB_PORT'=>'3306',  

'DB_PREFIX'=>'think_',  

// 其他项目配置参数………  

);

系统推荐使用该种方式,因为一般一个项目的数据库访问配置是相同的,该方法系统在连接数据库的时候会自动获取,无需手动连接.

可以对每个项目定义不同的数据库连接信息,还可以在调试配置文件(Conf/debug.php)里面定义调试数据库的配置信息,如果在项目配置文件和调试模式配置文件里面同时定义了数据库连接信息,那么在调试模式下面后者生效,部署模式下面前者生效.

第二种 使用DSN方式在初始化Db类的时候传参数

$db_dsn = "mysql://username:passwd@localhost:3306/DbName";  

$db = new Db($db_dsn);

该方式主要用于在控制器里面自己手动连接数据库的情况,或者用于创建多个数据库连接.

第三种 使用数组传参数

$DSN = array(   

'dbms'     => 'mysql',    

'username' => 'username',    

'password' => 'password',    

'hostname' => 'localhost',    

'hostport' => '3306',    

'database' => 'dbname'   

);  

$db = new Db($DSN);

该方式也是用于手动连接数据库的情况,或者用于创建多个数据库连接.

第四种 在模型类里面定义

protected $connection = array(   

'dbms'     => 'mysql',    

'username' => 'username',    

'password' => 'password',    

'hostname' => 'localhost',    

'hostport' => '3306',    

'database' => 'dbname'   

);  

// 或者使用下面的定义  

protected $connection = "mysql://username:passwd@localhost:3306/DbName";

如果在某个模型类里面定义了connection属性,则在实例化模型对象的时候,会使用该数据库连接信息进行数据库连接,通常用于某些数据表位于当前数据库连接之外的其它数据库.

ThinkPHP并不是在一开始就会连接数据库,而是在有数据查询操作的时候才会去连接数据库,额外的情况是,在系统第一次操作模型的时候,框架会自动连接数据库获取相关模型类的数据字段信息,并缓存下来.

(字段缓存目录:Runtime/Data/_fields)

ThinkPHP支持PDO方式,如果要使用PDO方式连接数据库,可以参考下面的设置.

我们以项目配置文件定义为例来说明:

return array(  

'DB_TYPE'=> 'pdo',   

// 注意DSN的配置针对不同的数据库有所区别 请参考PHP手册PDO类库部分  

'DB_DSN'=> 'mysql:host=localhost;dbname=think',  

'DB_USER'=>'root',   

'DB_PWD'=>'',   

'DB_PREFIX'=>'think_',  

// 其他项目配置参数………  

);

使用PDO方式的时候,要注意检查是否开启相关的PDO模块,DB_DSN参数仅对PDO方式连接才有效.

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
NOD32 v2.70.32 简体中文封装版 提供下载了
Feb 27 PHP
ExtJS与PHP、MySQL实现存储的方法
Apr 02 PHP
PHP内核介绍及扩展开发指南―基础知识
Sep 11 PHP
回帖脱衣服的图片实现代码
Feb 15 PHP
PHP中批量生成静态html(命令行下运行PHP)
Apr 19 PHP
PHP简单选择排序算法实例
Jan 26 PHP
PHP 中 Orientation 属性判断上传图片是否需要旋转
Oct 16 PHP
php实现登陆模块功能示例
Oct 20 PHP
PHP实现Session入库/存入redis的方法
May 04 PHP
phpstudy的php版本自由修改的方法
Oct 18 PHP
thinkphp5 路由分发原理
Mar 18 PHP
如何用Laravel包含你自己的帮助函数
May 27 PHP
PHP生成RSS文件类实例
Dec 05 #PHP
php实现两表合并成新表并且有序排列的方法
Dec 05 #PHP
ThinkPHP中redirect用法分析
Dec 05 #PHP
php查询ip所在地的方法
Dec 05 #PHP
smarty实现多级分类的方法
Dec 05 #PHP
Codeigniter框架实现获取分页数据和总条数的方法
Dec 05 #PHP
常见php数据文件缓存类汇总
Dec 05 #PHP
You might like
php下的权限算法的实现
2007/04/28 PHP
javascript some()函数用法详解
2014/11/13 PHP
php生成短域名函数
2015/03/23 PHP
php获取指定(访客)IP所有信息(地址、邮政编码、国家、经纬度等)的方法
2015/07/06 PHP
php+redis实现注册、删除、编辑、分页、登录、关注等功能示例
2017/02/15 PHP
php+ajax实现异步上传文件或图片功能
2017/07/18 PHP
PHP使用phpunit进行单元测试示例
2019/09/23 PHP
将CKfinder整合进CKEditor3.0的新方法
2010/01/10 Javascript
jQuery页面滚动浮动层智能定位实例代码
2011/08/23 Javascript
js判断客户端是iOS还是Android等移动终端的方法
2013/12/11 Javascript
jQuery+ajax实现动态执行脚本的方法
2015/01/27 Javascript
详解JavaScript函数对象
2015/11/15 Javascript
javascript断点调试心得分享
2016/04/23 Javascript
AngularJs Modules详解及示例代码
2016/09/01 Javascript
Vue.js 2.0中select级联下拉框实例
2017/03/06 Javascript
jQuery插件FusionCharts绘制2D双折线图效果示例【附demo源码】
2017/04/14 jQuery
nodejs中解决异步嵌套循环和循环嵌套异步的问题
2017/07/12 NodeJs
nodejs基于WS模块实现WebSocket聊天功能的方法
2018/01/12 NodeJs
postman+json+springmvc测试批量添加实例
2018/03/31 Javascript
vue select选择框数据变化监听方法
2018/08/24 Javascript
webpack4 处理SCSS的方法示例
2018/09/03 Javascript
[02:53]DOTA2英雄基础教程 山岭巨人小小
2013/12/09 DOTA
[00:12]2018DOTA2亚洲邀请赛 sylar表现SOLO技艺
2018/04/06 DOTA
Python工程师必考的6个经典面试题
2020/06/28 Python
pandas.DataFrame.drop_duplicates 用法介绍
2020/07/06 Python
python 三种方法实现对Excel表格的读写
2020/11/19 Python
很酷的小工具和电子产品商城:GearBest
2016/11/19 全球购物
Amara美国站:英国高端家居礼品网站,世界各地的奢侈家具品牌
2017/07/26 全球购物
H&M旗下高端女装品牌:& Other Stories
2018/05/07 全球购物
经济实惠的豪华背包和行李袋:Packs Project
2018/10/17 全球购物
StubHub希腊:购买体育赛事、音乐会和剧院门票
2019/08/03 全球购物
美术专业学生个人自我评价
2013/09/19 职场文书
信息部岗位职责
2013/11/12 职场文书
2015年幼儿园元旦亲子活动方案
2014/12/09 职场文书
python3实现Dijkstra算法最短路径的实现
2021/05/12 Python
redis哨兵常用命令和监控示例详解
2021/05/27 Redis