# 连接数据库
[上一页](60.html "上一页")[下一页](62.html "下一页")
ThinkPHP内置了抽象数据库访问层,把不同的数据库操作封装起来,我们只需要使用公共的Db类进行操作,而无需针对不同的数据库写不同的代码和底层实现,Db类会自动调用相应的数据库驱动来处理。目前的数据库包括Mysql、SqlServer、PgSQL、Sqlite、Oracle、Ibase、Mongo,也包括对PDO的支持,如果应用需要使用数据库,必须配置数据库连接信息,数据库的配置文件有多种定义方式。
常用的配置方式是在项目配置文件中添加下面的参数:`<?php<br class="calibre5"></br> //项目配置文件<br class="calibre5"></br> return array(<br class="calibre5"></br> //数据库配置信息<br class="calibre5"></br> 'DB_TYPE' => 'mysql', // 数据库类型<br class="calibre5"></br> 'DB_HOST' => 'localhost', // 服务器地址<br class="calibre5"></br> 'DB_NAME' => 'thinkphp', // 数据库名<br class="calibre5"></br> 'DB_USER' => 'root', // 用户名<br class="calibre5"></br> 'DB_PWD' => '', // 密码<br class="calibre5"></br> 'DB_PORT' => 3306, // 端口<br class="calibre5"></br> 'DB_PREFIX' => 'think_', // 数据库表前缀 <br class="calibre5"></br> //其他项目配置参数<br class="calibre5"></br> // ...<br class="calibre5"></br> );`或者采用如下配置`'DB_DSN' => 'mysql://username:password@localhost:3306/DbName'`使用DB_DSN方式定义可以简化配置参数,DSN参数格式为:`<b class="calibre6">数据库类型://用户名:密码@数据库地址:数据库端口/数据库名</b>`如果两种配置参数同时存在的话,DB_DSN配置参数优先。
注意:如果要设置分布式数据库,暂时不支持DB_DSN方式配置。如果采用PDO驱动的话,则必须首先配置DB_TYPE 为pdo,然后还需要单独配置其他参数,例如:`//PDO连接方式<br class="calibre5"></br>'DB_TYPE' => 'pdo', // 数据库类型<br class="calibre5"></br>'DB_USER' => 'root', // 用户名<br class="calibre5"></br>'DB_PWD' => '', // 密码<br class="calibre5"></br>'DB_PREFIX' => 'think_', // 数据库表前缀 <br class="calibre5"></br>'DB_DSN' => 'mysql:host=localhost;dbname=thinkphp;charset=UTF-8'`注意:PDO方式的DB_DSN配置格式有所区别,根据不同的数据库类型设置有所不同。
配置文件定义的数据库连接信息一般是系统默认采用的,因为一般一个项目的数据库访问配置是相同的。该方法系统在连接数据库的时候会自动获取,无需手动连接。
可以对每个项目和不同的分组定义不同的数据库连接信息,如果开启了调试模式的话,还可以在不同的应用状态的配置文件里面定义独立的数据库配置信息。第二种 在模型类里面定义connection属性
如果在某个模型类里面定义了connection属性的话,则实例化该自定义模型的时候会采用定义的数据库连接信息,而不是配置文件中设置的默认连接信息,通常用于某些数据表位于当前数据库连接之外的其它数据库,例如:`//在模型里单独设置数据库连接信息<br class="calibre5"></br>protected $connection = array(<br class="calibre5"></br> 'db_type' => 'mysql',<br class="calibre5"></br> 'db_user' => 'root',<br class="calibre5"></br> 'db_pwd' => '1234',<br class="calibre5"></br> 'db_host' => 'localhost',<br class="calibre5"></br> 'db_port' => '3306',<br class="calibre5"></br> 'db_name' => 'thinkphp'<br class="calibre5"></br>);`也可以采用DSN方式定义,例如:`//或者使用DSN定义<br class="calibre5"></br>protected $connection = 'mysql://root:1234@localhost:3306/thinkphp';`如果我们已经在配置文件中配置了额外的数据库连接信息,例如:`//数据库配置1<br class="calibre5"></br>'DB_CONFIG1' = array(<br class="calibre5"></br> 'db_type' => 'mysql',<br class="calibre5"></br> 'db_user' => 'root',<br class="calibre5"></br> 'db_pwd' => '1234',<br class="calibre5"></br> 'db_host' => 'localhost',<br class="calibre5"></br> 'db_port' => '3306',<br class="calibre5"></br> 'db_name' => 'thinkphp'<br class="calibre5"></br>),<br class="calibre5"></br>//数据库配置2<br class="calibre5"></br>'DB_CONFIG2' => 'mysql://root:1234@localhost:3306/thinkphp';`那么,我们可以把模型类的属性定义改为:`//调用配置文件中的数据库配置1<br class="calibre5"></br>protected $connection = 'DB_CONFIG1';<br class="calibre5"></br>//调用配置文件中的数据库配置2<br class="calibre5"></br>protected $connection = 'DB_CONFIG2';`如果采用的是M方法实例化模型的话,也可以支持传入不同的数据库连接信息,例如:`$User = M('User','other_','mysql://root:1234@localhost/demo'); `表示实例化User模型,连接的是demo数据库的other_user表,采用的连接信息是第三个参数配置的。如果我们在项目配置文件中已经配置了DB_CONFIG2的话,也可以采用:`$User = M('User','other_','DB_CONFIG2'); `如果你的个别数据表没有定义任何前缀的话,可以在前缀参数中传入NULL,例如:`$User = M('User',Null,'DB_CONFIG2'); `表示实例化User模型,连接的是demo数据库的user表。
需要注意的是,ThinkPHP的数据库连接的惰性的,所以并不是在实例化的时候就连接数据库,而是在有实际的数据操作的时候才会去连接数据库(额外的情况是,在系统第一次实例化模型的时候,会自动连接数据库获取相关模型类对应的数据表的字段信息)。
[上一页](60.html "上一页")[下一页](62.html "下一页")
- 序言
- 1. 入门
- 1.1 简介
- 1.2 基础概念
- 1.3 获取ThinkPHP
- 1.4 环境要求
- 1.5 许可协议
- 1.6 目录结构
- 1.7 命名规范
- 1.8 MVC分层
- 1.9 CBD架构
- 1.10 特性概述
- 1.11 系统流程
- 1.12 开发流程
- 2. 入口
- 2.1 入口文件
- 2.2 项目目录
- 2.3 部署目录
- 2.4 项目编译
- 2.5 调试模式
- 3. 配置
- 3.1 配置格式
- 3.2 惯例配置
- 3.3 项目配置
- 3.4 调试配置
- 3.5 分组配置
- 3.6 读取配置
- 3.7 动态配置
- 3.8 扩展配置
- 4. 函数和类库
- 4.1 函数库
- 4.2 类库
- 5. 控制器
- 5.1 URL模式
- 5.2 模块和操作
- 5.3 定义控制器
- 5.4 空操作
- 5.5 空模块
- 5.6 模块分组
- 5.7 URL伪静态
- 5.8 URL路由
- 5.9 URL重写
- 5.10 URL生成
- 5.11 URL大小写
- 5.12 前置和后置操作
- 5.13 跨模块调用
- 5.14 页面跳转
- 5.15 重定向
- 5.16 获取系统变量
- 5.17 判断请求类型
- 5.18 获取URL参数
- 5.19 AJAX返回
- 5.20 Action参数绑定
- 5.21 多层控制器支持
- 6. 模型
- 6.1 模型定义
- 6.2 模型实例化
- 6.3 字段定义
- 6.4 数据主键
- 6.5 属性访问
- 6.6 跨库操作
- 6.7 连接数据库
- 6.8 切换数据库
- 6.9 分布式数据库
- 6.10 创建数据
- 6.11 字段映射
- 6.12 连贯操作
- 6.13 CURD操作
- 6.14 ActiveRecord
- 6.15 自动验证
- 6.16 命名范围
- 6.17 自动完成
- 6.18 查询语言
- 6.19 查询锁定
- 6.20 字段排除
- 6.21 事务支持
- 6.22 高级模型
- 6.23 视图模型
- 6.24 关联模型
- 6.25 Mongo模型
- 6.26 动态模型
- 6.27 虚拟模型
- 6.28 多层模型支持
- 7. 视图
- 7.1 模板定义
- 7.2 模板赋值
- 7.3 模板输出
- 7.4 模板替换
- 7.5 获取内容
- 7.6 模板引擎
- 7.7 布局模板
- 8. 模板引擎
- 8.1 变量输出
- 8.2 系统变量
- 8.3 使用函数
- 8.4 默认值输出
- 8.5 使用运算符
- 8.6 内置标签
- 8.7 包含文件
- 8.8 导入文件
- 8.9 Volist标签
- 8.10 Foreach标签
- 8.11 For标签
- 8.12 Switch标签
- 8.13 比较标签
- 8.14 三元运算
- 8.15 范围判断标签
- 8.16 Present标签
- 8.17 Empty标签
- 8.18 Defined标签
- 8.19 Define标签
- 8.20 Assign标签
- 8.21 IF标签
- 8.22 标签嵌套
- 8.23 使用PHP代码
- 8.24 模板布局
- 8.25 模板继承
- 8.26 原样输出
- 8.27 模板注释
- 8.28 引入标签库
- 8.29 修改定界符
- 8.30 避免JS混淆
- 9. 日志
- 9.1 日志级别
- 9.2 记录方式
- 9.3 手动记录
- 10. 错误
- 10.1 异常处理
- 10.2 异常模板
- 10.3 异常显示
- 11. 调试
- 11.1 运行状态
- 11.2 页面Trace
- 11.3 调试方法
- 12. 缓存
- 12.1 缓存方式
- 12.2 动态缓存
- 12.3 缓存队列
- 12.4 快捷缓存
- 12.5 快速缓存
- 12.6 查询缓存
- 12.7 SQL解析缓存
- 12.8 静态缓存
- 13. 扩展
- 13.1 行为扩展
- 13.2 类库扩展
- 13.3 控制器扩展
- 13.4 模型扩展
- 13.5 驱动扩展
- 13.6 Widget扩展
- 13.7 模式扩展
- 13.8 引擎扩展
- 14. 安全
- 14.1 表单令牌
- 14.2 字段类型验证
- 14.3 防止SQL注入
- 14.4 输入过滤
- 14.5 上传安全
- 14.6 防止XSS攻击
- 14.7 其他安全建议
- 14.8 目录安全文件
- 14.9 保护模板文件
- 15. 性能
- 15.1 关闭调试模式
- 15.2 开启缓存
- 15.3 合并字段缓存
- 15.4 优化SQL
- 15.5 替换入口
- 15.6 前端优化
- 16. 部署
- 16.1 PATH_INFO支持
- 16.2 隐藏index.php
- 16.3 二级域名部署
- 16.4 定制错误页面
- 16.5 设置时区
- 17. SAE支持
- 17.1 SAE介绍
- 17.2 获取SAE
- 17.3 SAE开发
- 18. REST支持
- 18.1 REST介绍
- 18.2 REST模式
- 18.3 REST配置
- 18.4 REST路由
- 18.5 REST方法
- 19. 杂项
- 19.1 Session支持
- 19.2 Cookie支持
- 19.3 日期和时间
- 19.4 WML开发
- 19.5 多语言
- 19.6 数据分页
- 19.7 文件上传
- 19.8 验证码
- 19.9 图片添加水印
- 19.10 IP获取和定位
- 20. 附录
- 20.1 常量参考
- 20.2 配置参考
- 20.3 关于升级
- 20.4 大事记
- 鸣谢
- 关于