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 相关文章推荐
Win2003下APACHE+PHP5+MYSQL4+PHPMYADMIN 的简易安装配置
Nov 18 PHP
set_include_path在win和linux下的区别
Jan 10 PHP
php cookie 登录验证示例代码
Mar 16 PHP
在项目中寻找代码的坏命名
Jul 14 PHP
php字符串分割函数explode的实例代码
Feb 07 PHP
深入理解php的MySQL连接类
Jun 07 PHP
php以fastCGI的方式运行时文件系统权限问题及解决方法
May 11 PHP
php实现的单一入口应用程序实例分析
Sep 23 PHP
在Mac OS上搭建PHP的Yii框架及相关测试环境
Feb 14 PHP
jquery+thinkphp实现跨域抓取数据的方法
Oct 15 PHP
php文件上传原理与实现方法详解
Dec 20 PHP
laravel与thinkphp之间的区别与优缺点
Mar 02 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
MySQL GBK→UTF-8编码转换
2007/05/24 PHP
ThinkPHP数据操作方法总结
2015/09/28 PHP
php中通用的excel导出方法实例
2017/12/30 PHP
JavaScript与DOM组合动态创建表格实例
2012/12/23 Javascript
JavaScript中对循环语句的优化技巧深入探讨
2014/06/06 Javascript
js创建一个input数组并绑定click事件的方法
2014/06/12 Javascript
jQuery中append()方法用法实例
2014/12/25 Javascript
开启Javascript中apply、call、bind的用法之旅模式
2015/10/28 Javascript
使用 bootstrap modal遇到的问题小结
2016/11/09 Javascript
AngularJS过滤器filter用法总结
2016/12/13 Javascript
如何提高javascript加载速度
2016/12/26 Javascript
Vue2单一事件管理组件通信
2017/05/09 Javascript
vue 点击按钮实现动态挂载子组件的方法
2018/09/07 Javascript
Vue官方推荐AJAX组件axios.js使用方法详解与API
2018/10/09 Javascript
创建Vue项目以及引入Iview的方法示例
2018/12/03 Javascript
vue页面加载时的进度条功能(实例代码)
2020/01/13 Javascript
js实现无限层级树形数据结构(创新算法)
2020/02/27 Javascript
基于jquery实现彩色投票进度条代码解析
2020/08/26 jQuery
python的id()函数解密过程
2012/12/25 Python
Python深入学习之对象的属性
2014/08/31 Python
Python性能提升之延迟初始化
2016/12/04 Python
浅谈Python中(&,|)和(and,or)之间的区别
2019/08/07 Python
18个Python脚本可加速你的编码速度(提示和技巧)
2019/10/17 Python
python list多级排序知识点总结
2019/10/23 Python
pycharm的python_stubs问题
2020/04/08 Python
PyQt5实现仿QQ贴边隐藏功能的实例代码
2020/05/24 Python
伦敦平价潮流珠宝首饰品牌:Astrid & Miyu
2016/10/10 全球购物
英国泰坦旅游网站:全球陪同游览,邮轮和铁路旅行
2016/11/29 全球购物
新教师工作感言
2014/02/16 职场文书
公司请假条范文
2014/04/11 职场文书
个人评语大全
2014/05/04 职场文书
经济贸易系求职信
2014/08/04 职场文书
党的群众路线教育实践活动方案
2014/10/31 职场文书
驻村工作简报
2015/07/20 职场文书
护理心得体会范文
2016/01/22 职场文书
Maven学习----Maven安装与环境变量配置教程
2021/06/29 Java/Android