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 相关文章推荐
php桌面中心(二) 数据库写入
Mar 11 PHP
php中ob(Output Buffer 输出缓冲)函数使用方法
Jul 21 PHP
php面向对象全攻略 (十一)__toString()用法 克隆对象 __call处理调用错误
Sep 30 PHP
献给php初学者(入门学习经验谈)
Oct 12 PHP
ThinkPHP结合ajax、Mysql实现的客户端通信功能代码示例
Jun 23 PHP
PHP直接修改表内容DataGrid功能实现代码
Sep 24 PHP
用PHP将Unicode 转化为UTF-8的实现方法(推荐)
Feb 08 PHP
PHP实现针对日期,月数,天数,周数,小时,分,秒等的加减运算示例【基于strtotime】
Apr 19 PHP
PHP 使用二进制保存用户状态的实例
Jan 29 PHP
PHP使用PDO操作sqlite数据库应用案例
Mar 07 PHP
PHP实现的数据对象映射模式详解
Mar 20 PHP
PHP使用 Pear 进行安装和卸载包的方法详解
Jul 08 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/03/03 PHP
编写安全 PHP应用程序的七个习惯深入分析
2013/06/08 PHP
PHP实现的支付宝支付功能示例
2019/03/26 PHP
ThinkPHP5&5.1实现验证码的生成、使用及点击刷新功能示例
2020/02/07 PHP
Ext对基本类型的扩展 ext,extjs,format
2010/12/25 Javascript
打印json对象的内容及JSON.stringify函数应用
2013/03/29 Javascript
nodejs获取本机内网和外网ip地址的实现代码
2014/06/01 NodeJs
基于 Node.js 实现前后端分离
2016/04/23 Javascript
jQuery多级联动下拉插件chained用法示例
2016/08/20 Javascript
jQuery中table数据的值拷贝和拆分
2017/03/19 Javascript
angular.js指令中transclude选项及ng-transclude指令详解
2017/05/24 Javascript
浅谈vue中$event理解和框架中在包含默认值外传参
2020/08/07 Javascript
JS绘图Flot如何实现动态可刷新曲线图
2020/10/16 Javascript
[15:15]教你分分钟做大人:狙击手
2014/10/30 DOTA
Python编程生成随机用户名及密码的方法示例
2017/05/05 Python
Python中的is和==比较两个对象的两种方法
2017/09/06 Python
解决PyCharm不运行脚本,而是运行单元测试的问题
2019/01/17 Python
python3.6根据m3u8下载mp4视频
2019/06/17 Python
python操作gitlab API过程解析
2019/12/27 Python
Python之Matplotlib文字与注释的使用方法
2020/06/18 Python
Python创建简单的神经网络实例讲解
2021/01/04 Python
Python解析m3u8拼接下载mp4视频文件的示例代码
2021/03/03 Python
推荐10个CSS3 制作的创意下拉菜单效果
2014/02/11 HTML / CSS
HTML5网页录音和上传到服务器支持PC、Android,支持IOS微信功能
2019/04/26 HTML / CSS
来自圣地亚哥的实惠太阳镜:Knockaround
2018/08/27 全球购物
Mankind美国/加拿大:英国领先的男士美容护发用品公司
2018/12/05 全球购物
WebSphere 应用服务器都支持哪些认证
2013/12/26 面试题
当文件系统受到破坏时,如何检查和修复系统?
2012/03/09 面试题
科室工作的个人自我评价
2013/10/30 职场文书
社区植树节活动总结
2015/02/06 职场文书
个人总结怎么写
2015/02/26 职场文书
2015年南京大屠杀纪念日活动总结
2015/03/24 职场文书
导游词之张家口
2019/12/13 职场文书
MySQL中几种插入和批量语句实例详解
2021/09/14 MySQL
win10截图快捷键win+shift+s没有反应无法截图怎么解决?
2022/08/14 数码科技
HTML5中的DOCUMENT.VISIBILITYSTATE属性详解
2023/05/07 HTML / CSS