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中文字符串截取方法实例总结
Sep 30 PHP
PHP生成不重复标识符的方法
Nov 21 PHP
php匹配字符中链接地址的方法
Dec 22 PHP
php数组合并与拆分实例分析
Jun 12 PHP
CodeIgniter钩子用法实例详解
Jan 20 PHP
php有效防止图片盗用、盗链的两种方法
Nov 01 PHP
php中引用符号(&)的使用详细介绍
Dec 06 PHP
PHP实现用session来实现记录用户登陆信息
Oct 15 PHP
PHP中引用类型和值类型功能与用法示例
Feb 26 PHP
详解php命令注入攻击
Apr 06 PHP
PHP文件上传小程序 适合初学者学习!
May 23 PHP
PHP批斗大会之缺失的异常详解
Jul 09 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可逆加密函数(分享)
2013/06/06 PHP
PHP实现基于mysqli的Model基类完整实例
2016/04/08 PHP
浅谈php中变量的数据类型判断函数
2017/03/04 PHP
Laravel框架源码解析之反射的使用详解
2020/05/14 PHP
dess中一个简单的多路委托的实现
2010/07/20 Javascript
formValidator3.3的ajaxValidator一些异常分析
2011/07/12 Javascript
纯js实现瀑布流展现照片(自动适应窗口大小)
2013/04/08 Javascript
javascript实现Table间隔色以及选择高亮(和动态切换数据)的方法
2015/05/14 Javascript
nodejs初步体验篇
2015/11/23 NodeJs
javascript Promise简单学习使用方法小结
2016/05/17 Javascript
关于javascript原型的修改与重写(覆盖)差别详解
2016/08/31 Javascript
Vue中多个元素、组件的过渡及列表过渡的方法示例
2019/02/13 Javascript
JavaScript创建、读取和删除cookie
2019/09/03 Javascript
jquery将json转为数据字典的实例代码
2019/10/11 jQuery
如何利用node.js开发一个生成逐帧动画的小工具
2019/12/01 Javascript
微信小程序 (地址选择1)--选取搜索地点并显示效果
2019/12/17 Javascript
使用Django的模版来配合字符串翻译工作
2015/07/27 Python
Python HTTP客户端自定义Cookie实现实例
2017/04/28 Python
python按综合、销量排序抓取100页的淘宝商品列表信息
2018/02/24 Python
Scrapy框架爬取Boss直聘网Python职位信息的源码
2019/02/22 Python
python实现一个猜拳游戏
2020/04/05 Python
Python实现发票自动校核微信机器人的方法
2020/05/22 Python
浅谈Python程序的错误:变量未定义
2020/06/02 Python
python中如何设置代码自动提示
2020/07/15 Python
python 利用openpyxl读取Excel表格中指定的行或列教程
2021/02/06 Python
浅谈Html5页面打开app的一些思考
2020/03/30 HTML / CSS
Otel.com:折扣酒店预订
2017/08/24 全球购物
学生实习自我鉴定
2013/10/11 职场文书
xxx同志考察材料
2014/02/07 职场文书
基层党员公开承诺书
2014/05/29 职场文书
法律专业自荐信
2014/06/03 职场文书
学校领导班子群众路线整改措施
2014/09/16 职场文书
2015年推普周活动方案
2015/05/06 职场文书
幼儿园2016圣诞节活动总结
2016/03/31 职场文书
CSS3 实现的图片悬停的切换按钮
2021/04/13 HTML / CSS
Win11运行育碧游戏总是崩溃怎么办 win11玩育碧游戏出现性能崩溃的解决办法
2022/04/06 数码科技