1.基本使用配置了数据库连接信息后,我们就可以直接使用数据库运行原生sql操作了,支持query(查询操作)和execute(写入操作)方法,并且支持参数绑定。
public function read() {$sql = db::query('select * from news'); dump($sql); }
输出的是:
execute方法:
public function read() {$sql = db::execute('insert into news (nid, rid) values (11, 11)');; dump($sql); }
输出:
数据库添加成功!
也支持命名占位符绑定,例如:
public function read() {$sql = db::query('select * from news where nid=:nid',['nid'=>1]); dump($sql); }
输出:
execute方法:
public function read() {$sql = db::execute('insert into news (nid, rid) values (:nid, :rid)',['nid'=>18,'rid'=>'121']); dump($sql); }
输出:
数据库添加成功!
可以使用多个数据库连接:
2.查询构造器听名字就知道,很装x..
先来看基本查询;
查询一个数据:
// table方法必须指定完整的数据表名$sql =db::table('news')->where('nid',1)->find(); dump($sql);
find = 查询一条;并且查询结果不存在,返回 null
输出:
db::table('think_user')->where('status',1)->select();
这条查询语句与上面同效,但是select 方法查询结果不存在,返回空数组
额 这个玩意叫查询数据集,没错!
默认情况下,find和select方法返回的都是数组。
如果你要查询某个字段的值,咋整?
public function read() {// 返回某个字段的值$sql =db::table('news')->where('nid',18)->value('rid'); dump($sql); }
这样看输出,我求rid的值:
如果你需要处理成千上百条数据库记录,可以考虑使用chunk方法,该方法一次获取结果集的一小块,然后填充每一小块数据到要处理的闭包,该方法在编写处理大量数据库记录的时候非常有用。
public function read() {$sql =db::table('news')->chunk(1,function($user){foreach($user as $u) { dump($u); } }); }
这个样子 就可以一条一条都给遍历出来了!
是“一条一条·”,嘿!
3.添加数据跟删除数据使用 db 类的 insert 方法向数据库提交数据
public function read() {$data = ['ntitle' => '123', 'rid' => '456'];$sql = db::table('news')->insert($data); dump($sql); }
添加成功后insert 方法返回添加成功的条数,insert 正常情况返回 1
添加数据后如果需要返回新增数据的自增主键,可以使用getlastinsid方法:
public function read() {$data = ['ntitle' => '123', 'rid' => '345'];$sql = db::table('news')->insert($data);$userid = db::name('news')->getlastinsid('nid'); dump($userid); dump($sql); }
看输出:
主键字段22!
添加多条数据:
添加多条数据直接向 db 类的 insertall 方法传入需要添加的数据即可;
public function read() {$data = [ ['ntitle' =>'gaga','rid' => '12'],['ntitle' =>'gaaaga','rid' => '123'] ];$sql = db::table('news')->insertall($data); dump($sql); }
这样的话,返回的应该是两条2
删除数据:
根据主键来删除
public function read() {// 根据主键 来删$sql = db::table('news')->delete(1);//多删 //$sql = db::table('news')->delete(1,2,3);dump($sql); }
执行成功返回影响行数;
还有一种是根据条件来删除的
public function read() {// 根据条件 来删$sql = db::table('news')->where('nid',18)->delete();//多删 //$sql = db::table('news')->where('nid','<',1)->delete();dump($sql); }
执行成功也是返回影响行数;
4.查询方法:where方法:
可以使用where方法进行and条件查询:
public function read() {$sql = db::table('news')->where('nid',20)->where('ntitle',123)->find(); dump($sql); }
whereor方法:
使用whereor方法进行or查询:
public function read() {$sql = db::table('news')->where('nid',20)->whereor('ntitle','like','%123%')->find(); dump($sql); }
混合查询:
where方法和whereor方法在复杂的查询条件中经常需要配合一起混合使用
public function read() {$sql = db::table('news')->where(function($query){$query->where('nid',21)->where('nid',22); })->whereor(function($query) {$query->where('ntitle','123')->whereor('ntitle','123'); })->select(); dump($sql); }
输出的是:
看一下生成的代码:
select * from `news` where ( `nid` = 1 or `nid` = 2 ) or ( `ntitle` like '123' or `ntitle` like '123' )
第一个查询方法用where或者whereor是没有区别的。
查询接五
以上就是thinkphp5.0学习笔记之数据库的操作的详细内容。