thinkphp5.0连接mysql_thinkphp5.0 | 数据库

配置数据库

https://www.kancloud.cn/manual/thinkphp5/118059

原生sql

query(查询) execute(写入)

Db::query('select * from think_user where id=?',[8]);

Db::execute('insert into think_user (id, name) values (?, ?)',[8,'thinkphp']);

也支持命名占位符绑定,例如:

Db::query('select * from think_user where id=:id',['id'=>8]);

Db::execute('insert into think_user (id, name) values (:id, :name)',['id'=>8,'name'=>'thinkphp']);

可以使用多个数据库连接,使用

Db::connect($config)->query('select * from think_user where id=:id',['id'=>8]);

$config是一个单独的数据库配置,支持数组和字符串,也可以是一个数据库连接的配置参数名。

查询事件

从5.0.4+版本开始,增加了数据库的CURD操作事件支持,包括:

事件 描述

before_select select查询前回调

before_find find查询前回调

after_insert insert操作成功后回调

after_update update操作成功后回调

after_delete delete操作成功后回调

查询事件仅支持find、select、insert、update和delete方法。

使用下面的方法注册数据库查询事件

Query::event('after_insert','callback');

Query::event('before_select',function($options,$query){

// 事件处理

return $result;

});

事务操作transaction

MySQL 的 MyISAM 不支持事务处理,需要使用 InnoDB 引擎。

自动控制事务处理

Db::transaction(function(){

Db::table('think_user')->find(1);

Db::table('think_user')->delete(1);

});

也可以手动控制事务,例如:

// 启动事务

Db::startTrans();

try{

Db::table('think_user')->find(1);

Db::table('think_user')->delete(1);

// 提交事务

Db::commit();

} catch (\Exception $e) {

// 回滚事务

Db::rollback();

}

注意在事务操作的时候,确保你的数据库连接是相同的。

监听sql

开启数据库的调试模式,默认未开启

Db::listen(function($sql, $time, $explain){

// 记录SQL

echo $sql. ' ['.$time.'s]';

// 查看性能分析结果

dump($explain);

});

V5.0.19+版本开始,listen方法增加master参数用于标记当前的主从查询。

Db::listen(function ($sql, $time, $explain, $master) {

// 记录SQL

echo $sql . ' [' . $time . 's] ' . ($master ? 'master' : 'slave');

// 查看性能分析结果

dump($explain);

});

存储过程

5.0支持存储过程

如果我们定义了一个数据库存储过程sp_query,可以使用下面的方式调用:

$result = Db::query('call sp_query(8)');

返回的是一个二维数组,也可以使用参数绑定,例如:

$result = Db::query('call sp_query(?)',[8]);

// 或者命名绑定

$result = Db::query('call sp_query(:id)',['id'=>8]);

数据集

5.0.5 原生查询不支持返回数据集对象

数据库的查询结果也就是数据集,默认的配置下,数据集的类型是一个二维数组,我们可以配置成数据集类,就可以支持对数据集更多的对象化操作,需要使用数据集类功能,可以配置数据库的resultset_type参数如下:

return [

// 数据库类型

'type' => 'mysql',

// 数据库连接DSN配置

'dsn' => '',

// 服务器地址

'hostname' => '127.0.0.1',

// 数据库名

'database' => 'thinkphp',

// 数据库用户名

'username' => 'root',

// 数据库密码

'password' => '',

// 数据库连接端口

'hostport' => '',

// 数据库连接参数

'params' => [],

// 数据库编码默认采用utf8

'charset' => 'utf8',

// 数据库表前缀

'prefix' => 'think_',

// 数据集返回类型

'resultset_type' => 'collection',

];

返回的数据集对象是think\Collection,提供了和数组无差别用法,并且另外封装了一些额外的方法。

可以直接使用数组的方式操作数据集对象,例如:

// 获取数据集

$users = Db::name('user')->select();

// 直接操作第一个元素

$item = $users[0];

// 获取数据集记录数

$count = count($users);

// 遍历数据集

foreach($users as $user){

echo $user['name'];

echo $user['id'];

}

Collection类包含了下列主要方法:

$users = Db::name('user')->select();

if($users->isEmpty()){}

方法 描述

isEmpty 是否为空

toArray 转换为数组

all 所有数据

merge 合并其它数据

diff 比较数组,返回差集

flip 交换数据中的键和值

intersect 比较数组,返回交集

keys 返回数据中的所有键名

pop 删除数据中的最后一个元素

shift 删除数据中的第一个元素

unshift 在数据开头插入一个元素

reduce 通过使用用户自定义函数,以字符串返回数组

reverse 数据倒序重排

chunk 数据分隔为多个数据块

each 给数据的每个元素执行回调

filter 用回调函数过滤数据中的元素

column 返回数据中的指定列

sort 对数据排序

shuffle 将数据打乱

slice 截取数据中的一部分

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值