ThinkPHP内置了抽象数据库访问层,把不同的数据库操作封装起来,我们只需要使用公共的Db类进行操作,而无需针对不同的数据库写不同的代码和底层实现,Db类会自动调用相应的数据库驱动来处理。目前的数据库包括Mysql、SqlServer、PgSQL、Sqlite、Oracle、Ibase、Mongo,也包括对PDO的支持。

如果应用需要使用数据库,必须配置数据库连接信息,数据库的配置文件有多种定义方式。

一、全局配置定义

常用的配置方式是在应用配置文件或者模块配置文件中添加下面的配置参数:

  1. //数据库配置信息
  2. 'DB_TYPE' => 'mysql', // 数据库类型
  3. 'DB_HOST' => 'localhost', // 服务器地址
  4. 'DB_NAME' => 'thinkphp', // 数据库名
  5. 'DB_USER' => 'root', // 用户名
  6. 'DB_PWD' => '123456', // 密码
  7. 'DB_PORT' => 3306, // 端口
  8. 'DB_PREFIX' => 'think_', // 数据库表前缀
  9. 'DB_CHARSET'=> 'utf8', // 字符集
  10. 'DB_DEBUG' => TRUE, // 数据库调试模式 开启后可以记录SQL日志 3.2.3新增

数据库的类型由DB_TYPE参数设置。

下面是目前支持的数据库设置:

DB_TYPE设置 支持的数据库类型
mysql或mysqli mysql
pgsql pgsql
sqlite sqlite
mssql 或sqlsrv sqlserver
oracle oracle
ibase ibase
mongo mongo
PDO PDO支持的所有数据库 3.2.3以上版本取消了PDO设置

3.2.3以下版本,如果DB_TYPE使用PDO类型的话,数据库类型则由DB_DSN配置决定。 3.2.3以上版本,DB_DSN无需设置,由系统自动设置。

如果是3.2.3版本的话,由于全部采用PDO方式,所以DB_TYPE需要配置为实际的数据库类型,不再支持设置为PDO,也不再区分mysql和mysqli。

或者采用如下配置

  1. 'DB_DSN' => 'mysql://root:123456@localhost:3306/thinkphp#utf8'

使用DB_DSN方式定义可以简化配置参数,DSN参数格式为:

数据库类型://用户名:密码@数据库地址:数据库端口/数据库名#字符集

字符集设置需要3.2.1版本以上有效,字符集如果没有设置的话,默认为utf8。

如果两种配置参数同时存在的话,DB_DSN配置参数优先。

注意:如果要设置分布式数据库,暂时不支持DB_DSN方式配置。

如果采用PDO驱动的话,则必须首先配置DB_TYPEpdo,然后还需要单独配置其他参数,例如:

  1. //PDO连接方式
  2. 'DB_TYPE' => 'pdo', // 数据库类型
  3. 'DB_USER' => 'root', // 用户名
  4. 'DB_PWD' => '', // 密码
  5. 'DB_PREFIX' => 'think_', // 数据库表前缀
  6. 'DB_DSN' => 'mysql:host=localhost;dbname=thinkphp;charset=utf8'

注意:PDO方式的DB_DSN配置格式有所区别,根据不同的数据库类型设置有所不同,具体可以参考PHP手册。

配置文件定义的数据库连接信息一般是系统默认采用的,因为一般一个应用的数据库访问配置是相同的。该方法系统在连接数据库的时候会自动获取,无需手动连接。

可以对每个模块定义不同的数据库连接信息,如果开启了调试模式的话,还可以在不同的应用状态的配置文件里面定义独立的数据库配置信息。

二、模型类定义

如果在某个模型类里面定义了connection属性的话,则实例化该自定义模型的时候会采用定义的数据库连接信息,而不是配置文件中设置的默认连接信息,通常用于某些数据表位于当前数据库连接之外的其它数据库,例如:

  1. //在模型里单独设置数据库连接信息
  2. namespace Home\Model;
  3. use Think\Model;
  4. class UserModel extends Model{
  5. protected $connection = array(
  6. 'db_type' => 'mysql',
  7. 'db_user' => 'root',
  8. 'db_pwd' => '1234',
  9. 'db_host' => 'localhost',
  10. 'db_port' => '3306',
  11. 'db_name' => 'thinkphp',
  12. 'db_charset' => 'utf8',
  13. );
  14. }

也可以采用字符串方式定义,例如:

  1. //在模型里单独设置数据库连接信息
  2. namespace Home\Model;
  3. use Think\Model;
  4. class UserModel extends Model{
  5. //或者使用字符串定义
  6. protected $connection = 'mysql://root:1234@localhost:3306/thinkphp#utf8';
  7. }

如果我们已经在配置文件中配置了额外的数据库连接信息,例如:

  1. //数据库配置1
  2. 'DB_CONFIG1' => array(
  3. 'db_type' => 'mysql',
  4. 'db_user' => 'root',
  5. 'db_pwd' => '1234',
  6. 'db_host' => 'localhost',
  7. 'db_port' => '3306',
  8. 'db_name' => 'thinkphp',
  9. 'db_charset'=> 'utf8',
  10. ),
  11. //数据库配置2
  12. 'DB_CONFIG2' => 'mysql://root:1234@localhost:3306/thinkphp#utf8';

那么,我们可以把模型类的属性定义改为:

  1. //在模型里单独设置数据库连接信息
  2. namespace Home\Model;
  3. use Think\Model;
  4. class UserModel extends Model{
  5. //调用配置文件中的数据库配置1
  6. protected $connection = 'DB_CONFIG1';
  7. }
  1. //在模型里单独设置数据库连接信息
  2. namespace Home\Model;
  3. use Think\Model;
  4. class InfoModel extends Model{
  5. //调用配置文件中的数据库配置1
  6. protected $connection = 'DB_CONFIG2';
  7. }

扬州大理石平台

三、实例化定义

除了在模型定义的时候指定数据库连接信息外,我们还可以在实例化的时候指定数据库连接信息,例如: 如果采用的是M方法实例化模型的话,也可以支持传入不同的数据库连接信息,例如:

  1. $User = M('User','other_','mysql://root:1234@localhost/demo#utf8');

表示实例化User模型,连接的是demo数据库的other_user表,采用的连接信息是第三个参数配置的。如果我们在项目配置文件中已经配置了DB_CONFIG2的话,也可以采用:

  1. $User = M('User','other_','DB_CONFIG2');

需要注意的是,ThinkPHP的数据库连接是惰性的,所以并不是在实例化的时候就连接数据库,而是在有实际的数据操作的时候才会去连接数据库(额外的情况是,在系统第一次实例化模型的时候,会自动连接数据库获取相关模型类对应的数据表的字段信息)。

thinkphp 链接数据库的更多相关文章

  1. thinkphp框架 的 链接数据库和操作数据

    框架有时会用到数据库的内容,在"ThinkPhp框架知识"的那篇随笔中提到过,现在这篇随笔详细的描述下. 一.链接数据库 (1)找到模块文件夹中的Conf文件夹,然后进行编写con ...

  2. ThinkPHP框架 基础 链接数据库

    在第一次成功访问应用入口文件的时候,会显示出一个系统默认的欢迎页面并自动在APPLication文件夹里生成三个文件夹,如下,第一次访问应用文件路径:localhost/tr/index.php   ...

  3. tp框架知识 之(链接数据库和操作数据)

    框架有时会用到数据库的内容,在"ThinkPhp框架知识"的那篇随笔中提到过,现在这篇随笔详细的描述下. 一.链接数据库 (1)找到模块文件夹中的Conf文件夹,然后进行编写con ...

  4. tp框架知识 之(链接数据库和操作数据内容)

    框架有时会用到数据库的内容,在"ThinkPhp框架知识"的那篇随笔中提到过,现在这篇随笔详细的描述下. 一.链接数据库 (1)找到模块文件夹中的Conf文件夹,然后进行编写con ...

  5. PHP学习-链接数据库

    链接数据库文件:conn.php <?php $conn = mysql_connect("localhost:3306","root","us ...

  6. PHP 链接数据库1(连接数据库&简单的登录注册)

    对 解析变量的理解 数据库的名称和表的名称不能重复 从结果中取出的数据   都是以数组的形式取出的 1.PHP查询数据库中的某条信息 //PHP链接数据库 /*1.造链接对象 IP地址 用户名 密码 ...

  7. JDBC的使用(一):引用外部jar;代码链接数据库

    一:引用外部jar 1.首先不jar文件放到项目下: 2.在Eclipse中,右键相应的项目--构建路径--配置构建路径--库--添加外部jar:选中-打开-应用-确定. 二:代码链接数据库 1.加载 ...

  8. Connect to Database Using Custom params链接数据库配置参数说明

    使用RF的关键字Connect to Database Using Custom params链接数据库,对应的参数说明: a)     第一个参数我使用的是cx_Oracle,就写这个 b)     ...

  9. php链接数据库

      1:找到 ySQL服务器 $conn = mysql_connect("localhost","","") or die("链 ...

随机推荐

  1. spring-boot 集成ehcache报错:org.springframework.expression.spel.SpelEvaluationException: EL1008E:

    错误信息:org.springframework.expression.spel.SpelEvaluationException: EL1008E: Property or field 'pageab ...

  2. metasploit5配置数据库

    #踩坑:Please run msfdb as a non-root user apt-get install postgresql #安装数据库 service postgresql start # ...

  3. docker Dcokerfile学习---构建nginx环境

    1.创建项目目录并上传包 $ mkdir docker_nginx $ cd docker_nginx 下载nginx包 $ wget http://nginx.org/download/nginx- ...

  4. js字符与ASCII码互转的方法

    大写字母A-Z对应的ASCII码值是65-90 小写字母a-z对应的ASCII码值是97-122 将字母转为ascii码的方法: 将ascii码转为对应字母的方法:

  5. MyBatis是如何使用的?

    MyBatis前身世iBatis本是Apache的一个开源项目,2010年这个项目迁移到google code并改名为MyBatis. 一.高级软件介绍 1.JDK 8 2.Eclipse mars2 ...

  6. thinkphp 多语言支持

    ThinkPHP内置多语言支持,如果你的应用涉及到国际化的支持,那么可以定义相关的语言包文件.任何字符串形式的输出,都可以定义语言常量. 要启用多语言功能,需要配置开启多语言行为,在应用的配置目录下面 ...

  7. Linux/Mac中alias的使用

    最近在设置代理的时候,每次手写不方便,想起linux有个alias命令可以用,防止忘记,这边记录一下 一.alias 设置 1.设置别名 proxy # 1. # 设置别名前,使用 `type 自定义 ...

  8. Vue的data选项使用注意

    使用组件时,大多数可以传入到Vue构造器中的选项可以在Vue extend()或 Vue.component() 中注册组件时使用,但是有一个重要的前提:data必须是函数 .在 var vm = n ...

  9. eclipse打包插件net.sf.fjep.fatjar

    eclipse打包插件安装 1)将net.sf.fjep.fatjar_0.0.32.jar拷贝到eclipse安装目录中的plugins目录下,然后重启eclipse即可. 软件获取方式: 链接:h ...

  10. java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)

    :: - [localhost-startStop-] INFO - Root WebApplicationContext: initialization started -- :: - [local ...