thinkphp 链接数据库
ThinkPHP内置了抽象数据库访问层,把不同的数据库操作封装起来,我们只需要使用公共的Db类进行操作,而无需针对不同的数据库写不同的代码和底层实现,Db类会自动调用相应的数据库驱动来处理。目前的数据库包括Mysql、SqlServer、PgSQL、Sqlite、Oracle、Ibase、Mongo,也包括对PDO的支持。
如果应用需要使用数据库,必须配置数据库连接信息,数据库的配置文件有多种定义方式。
一、全局配置定义
常用的配置方式是在应用配置文件或者模块配置文件中添加下面的配置参数:
- //数据库配置信息
- 'DB_TYPE' => 'mysql', // 数据库类型
- 'DB_HOST' => 'localhost', // 服务器地址
- 'DB_NAME' => 'thinkphp', // 数据库名
- 'DB_USER' => 'root', // 用户名
- 'DB_PWD' => '123456', // 密码
- 'DB_PORT' => 3306, // 端口
- 'DB_PREFIX' => 'think_', // 数据库表前缀
- 'DB_CHARSET'=> 'utf8', // 字符集
- '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。
或者采用如下配置
- 'DB_DSN' => 'mysql://root:123456@localhost:3306/thinkphp#utf8'
使用DB_DSN方式定义可以简化配置参数,DSN参数格式为:
数据库类型://用户名:密码@数据库地址:数据库端口/数据库名#字符集
字符集设置需要3.2.1版本以上有效,字符集如果没有设置的话,默认为utf8。
如果两种配置参数同时存在的话,DB_DSN配置参数优先。
注意:如果要设置分布式数据库,暂时不支持DB_DSN方式配置。
如果采用PDO驱动的话,则必须首先配置DB_TYPE为pdo,然后还需要单独配置其他参数,例如:
- //PDO连接方式
- 'DB_TYPE' => 'pdo', // 数据库类型
- 'DB_USER' => 'root', // 用户名
- 'DB_PWD' => '', // 密码
- 'DB_PREFIX' => 'think_', // 数据库表前缀
- 'DB_DSN' => 'mysql:host=localhost;dbname=thinkphp;charset=utf8'
注意:PDO方式的DB_DSN配置格式有所区别,根据不同的数据库类型设置有所不同,具体可以参考PHP手册。
配置文件定义的数据库连接信息一般是系统默认采用的,因为一般一个应用的数据库访问配置是相同的。该方法系统在连接数据库的时候会自动获取,无需手动连接。
可以对每个模块定义不同的数据库连接信息,如果开启了调试模式的话,还可以在不同的应用状态的配置文件里面定义独立的数据库配置信息。
二、模型类定义
如果在某个模型类里面定义了connection属性的话,则实例化该自定义模型的时候会采用定义的数据库连接信息,而不是配置文件中设置的默认连接信息,通常用于某些数据表位于当前数据库连接之外的其它数据库,例如:
- //在模型里单独设置数据库连接信息
- namespace Home\Model;
- use Think\Model;
- class UserModel extends Model{
- protected $connection = array(
- 'db_type' => 'mysql',
- 'db_user' => 'root',
- 'db_pwd' => '1234',
- 'db_host' => 'localhost',
- 'db_port' => '3306',
- 'db_name' => 'thinkphp',
- 'db_charset' => 'utf8',
- );
- }
也可以采用字符串方式定义,例如:
- //在模型里单独设置数据库连接信息
- namespace Home\Model;
- use Think\Model;
- class UserModel extends Model{
- //或者使用字符串定义
- protected $connection = 'mysql://root:1234@localhost:3306/thinkphp#utf8';
- }
如果我们已经在配置文件中配置了额外的数据库连接信息,例如:
- //数据库配置1
- 'DB_CONFIG1' => array(
- 'db_type' => 'mysql',
- 'db_user' => 'root',
- 'db_pwd' => '1234',
- 'db_host' => 'localhost',
- 'db_port' => '3306',
- 'db_name' => 'thinkphp',
- 'db_charset'=> 'utf8',
- ),
- //数据库配置2
- 'DB_CONFIG2' => 'mysql://root:1234@localhost:3306/thinkphp#utf8';
那么,我们可以把模型类的属性定义改为:
- //在模型里单独设置数据库连接信息
- namespace Home\Model;
- use Think\Model;
- class UserModel extends Model{
- //调用配置文件中的数据库配置1
- protected $connection = 'DB_CONFIG1';
- }
- //在模型里单独设置数据库连接信息
- namespace Home\Model;
- use Think\Model;
- class InfoModel extends Model{
- //调用配置文件中的数据库配置1
- protected $connection = 'DB_CONFIG2';
- }
三、实例化定义
除了在模型定义的时候指定数据库连接信息外,我们还可以在实例化的时候指定数据库连接信息,例如: 如果采用的是M方法实例化模型的话,也可以支持传入不同的数据库连接信息,例如:
- $User = M('User','other_','mysql://root:1234@localhost/demo#utf8');
表示实例化User模型,连接的是demo数据库的other_user表,采用的连接信息是第三个参数配置的。如果我们在项目配置文件中已经配置了DB_CONFIG2的话,也可以采用:
- $User = M('User','other_','DB_CONFIG2');
需要注意的是,ThinkPHP的数据库连接是惰性的,所以并不是在实例化的时候就连接数据库,而是在有实际的数据操作的时候才会去连接数据库(额外的情况是,在系统第一次实例化模型的时候,会自动连接数据库获取相关模型类对应的数据表的字段信息)。
thinkphp 链接数据库的更多相关文章
- thinkphp框架 的  链接数据库和操作数据
		框架有时会用到数据库的内容,在"ThinkPhp框架知识"的那篇随笔中提到过,现在这篇随笔详细的描述下. 一.链接数据库 (1)找到模块文件夹中的Conf文件夹,然后进行编写con ... 
- ThinkPHP框架   基础    链接数据库
		在第一次成功访问应用入口文件的时候,会显示出一个系统默认的欢迎页面并自动在APPLication文件夹里生成三个文件夹,如下,第一次访问应用文件路径:localhost/tr/index.php ... 
- tp框架知识 之(链接数据库和操作数据)
		框架有时会用到数据库的内容,在"ThinkPhp框架知识"的那篇随笔中提到过,现在这篇随笔详细的描述下. 一.链接数据库 (1)找到模块文件夹中的Conf文件夹,然后进行编写con ... 
- tp框架知识 之(链接数据库和操作数据内容)
		框架有时会用到数据库的内容,在"ThinkPhp框架知识"的那篇随笔中提到过,现在这篇随笔详细的描述下. 一.链接数据库 (1)找到模块文件夹中的Conf文件夹,然后进行编写con ... 
- PHP学习-链接数据库
		链接数据库文件:conn.php <?php $conn = mysql_connect("localhost:3306","root","us ... 
- PHP 链接数据库1(连接数据库&简单的登录注册)
		对 解析变量的理解 数据库的名称和表的名称不能重复 从结果中取出的数据 都是以数组的形式取出的 1.PHP查询数据库中的某条信息 //PHP链接数据库 /*1.造链接对象 IP地址 用户名 密码 ... 
- JDBC的使用(一):引用外部jar;代码链接数据库
		一:引用外部jar 1.首先不jar文件放到项目下: 2.在Eclipse中,右键相应的项目--构建路径--配置构建路径--库--添加外部jar:选中-打开-应用-确定. 二:代码链接数据库 1.加载 ... 
- Connect to Database Using Custom params链接数据库配置参数说明
		使用RF的关键字Connect to Database Using Custom params链接数据库,对应的参数说明: a) 第一个参数我使用的是cx_Oracle,就写这个 b) ... 
- php链接数据库
		1:找到 ySQL服务器 $conn = mysql_connect("localhost","","") or die("链 ... 
随机推荐
- velocity 相关
			Apache Velocity 是一个基于java的模板引擎(template engine) 应用场景1.Web 应用:开发者在不使用 JSP 的情况下,可以用 Velocity 让 HTML 具有 ... 
- eureka多实例,模拟多台机器
			本文只有一个eureka server项目,运行在不同的端口,模拟两台eureka服务.开发使用eclipse 4.8 先说pom.xml文件,如果出现问题,首先考虑springboot和其他包版本冲 ... 
- 读书笔记一、numpy基础--创建数组
			创建ndarray (1)使用array函数 接受一切序列型的对象(包括其他数组),然后产生一个新的含有传入数据的numpy数组. import numpy as np #将一个由数值组成列表作为 ... 
- 解决vi显示文件不能全屏的问题
			https://blog.csdn.net/ly890700/article/details/52735092 docker外: vi ~/.vimrc 
- CSIC_716_20191203【 socket网络编程,以及沾包问题的高级解决方式】
			AF_UNIX(本机通信) AF_INET(TCP/IP – IPv4) AF_INET6(TCP/IP – IPv6) SOCK_STREAM(TCP流) SOCK_DGRAM(UDP数据报) 远程 ... 
- ThreadLocal知识点
			ThreadLocal是什么 ThreadLocal 表面上看他是和多线程,线程同步有关的一个工具类,但其实他与线程同步机制无关.线程同步机制是多个线程共享同一个变量,而ThreadLocal是为每个 ... 
- 自然数幂和&伯努利数(Bernoulli)
			二项式定理求自然数幂和 由二项式定理展开得 \[ (n+1)^{k+1}-n^{k+1}=\binom {k+1}1n^k+\binom {k+1}2n^{k-1}+\cdots+\binom {k+ ... 
- Aira搭建
			Aira下载地址 https://github.com/aria2/aria2/releases AriaNg下载地址 https://github.com/mayswind/AriaNg/relea ... 
- Oracle分页:工作记录
			Oracle分页:传入值为List<String> . Mybatis XXXMapper.xml SELECT * FROM ( SELECT ROWNUM rn, t1.cardnum ... 
- 绘制delphi窗体的标题栏
			绘制delphi窗体的标题栏 按照设计,Delphi窗体的“标题”属性是由Windows负责绘制,标题栏在系统菜单旁边.如果你不想改变窗体的标题属性又想在窗体的标题栏添加一些自己的内容,你需要处理一个 ... 
