ThinkPHP5内置了抽象数据库访问层,把不同的数据库操作封装起来,我们只需要使用公共的Db类进行操作,而无需针对不同的数据库写不同的代码和底层实现,Db类会自动调用相应的数据库驱动来处理。采用PDO方式,目前包含了Mysql、SqlServer、PgSQL、Sqlite等数据库的支持。
如果应用需要使用数据库,必须配置数据库连接信息。
打开applicaton目录下的database.php
<?php
return [
// 数据库类型
'type' => 'mysql',
// 服务器地址
'hostname' => '127.0.0.1',
// 数据库名
'database' => '',
// 用户名
'username' => 'root',
// 密码
'password' => '',
// 端口
'hostport' => '',
// 连接dsn
'dsn' => '',
// 数据库连接参数
'params' => [],
// 数据库编码默认采用utf8
'charset' => 'utf8',
// 数据库表前缀
'prefix' => '',
// 数据库调试模式
'debug' => true,
// 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
'deploy' => 0,
// 数据库读写是否分离 主从式有效
'rw_separate' => false,
// 读写分离后 主服务器数量
'master_num' => 1,
// 指定从服务器序号
'slave_no' => '',
// 自动读取主库数据
'read_master' => false,
// 是否严格检查字段是否存在
'fields_strict' => true,
// 数据集返回类型
'resultset_type' => 'array',
// 自动写入时间戳字段
'auto_timestamp' => false,
// 时间字段取出后的默认时间格式
'datetime_format' => 'Y-m-d H:i:s',
// 是否需要进行SQL性能分析
'sql_explain' => false,
];
数组中的type:设置连接的数据库类型为mysql,
hostname设置数据库所在地址,
database需要设置连接的数据库名称,比如我们要操作myschool数据库,这里必须设置:database=>'myschool',
username设置为连接数据库的用户名
password设置为连接数据库的地址
prefix为数据表的前缀,假如数据库中所有的数据表都有统一的前缀tk_,那么prefix=>'tk_'
接下来我们要准备一个myschool数据库和一个student数据表
我们在application的Index目录下的controller目录中,新建一个Student.php文件
为了将来更好地移植到linux操作系统中,Student.php文件的首字母必须大写
我们来看一下这个文件的代码
<?php
namespace app\index\controller;
use think\Controller;
use think\Db;
use think\exception\PDOException;
/**
* Class Student
*/
class Student extends Controller
{
public function add()
{
$data = array('no' => 1001, 'name' => '张三', 'sex' => '男', 'age' => 20);
try {
$ret = Db::name('student')->insert($data);
echo '添加成功';
} catch (PDOException $ex) {
die($ex->getMessage());
}
}
}
在上面的方法中,我们使用Db类中的静态方法name()来指定操作数据表student,然后调用 insert()方法添加数据。
可以看出,name()方法属于静态方式,而insert()方法属于普通方法
insert 方法添加数据成功返回添加成功的条数,insert 正常情况返回 1
并且,我们使用异常处理try...catch...,当添加数据失败时,显示错误信息并终止程序
需要注意的是Db类和PDOException的命名空间
Db类的命名空间:think
PDOException的命名空间:think\exception
总结
通过完成学生的添加,学会Db类的简单使用。