模型技术 - 数据库连接

模型是 MVC 中的 M,可以理解为操作数据库部分操作。创建数据库连接

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

一:在配置文件里配置数据库连接信息

在使用模型操作之前,我们首先创建一个数据库:thinkphp。创建一个用户表:user。添加一些数据即可。 ThinkPHP 内置了抽象数据库访问层,把不同的数据库操作封装起来。我们只需要使用公共的 Db 类进行操作,无须针对不同的数据库写不同的代码和底层实现。Db 类会自动调用相应的数据库驱动来处理。目前支持的数据库包括 Mysql(包含 mysql 和 mysqli)、 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_', //数据库表前缀

PS:数据库全局配置信息除了 PDO,均可以采用上面的设置。 //PDO专用定义 'DB_TYPE'=>'pdo', //数据库类型 'DB_USER'=>'root', //用户名 'DB_PWD'=>'123456', //密码 'DB_PREFIX'=>'think_', //数据库表前缀 'DB_DSN'=>'mysql:host=localhost;dbname=thinkphp;charset=UTF8',

系统推荐使用该种方式,因为一般一个项目的数据库访问配置是相同的,该方法系统在连接数据库的时候会自动获取,无需手动连接.

二:在模型类里定义

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

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并不是在一开始就会连接数据库,而是在有数据查询操作的时候才会去连接数据库,额外的情况是,在系统第一次操作模型的时候,框架会自动连接数据库获取相关模型类的数据字段信息,并缓存下来.

三:实例化的时候指定数据库连接信息

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

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

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

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

原文发布于微信公众号 - Tech爬虫(php_pachong)

原文发表时间:2019-03-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券