• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

thinkphp5.0学习笔记之数据库的操作

php 搞代码 4年前 (2022-01-22) 39次浏览 已收录 0个评论

ThinkPHP内置了抽象数据库访问层,把不同的数据库操作封装起来,我们只需要使用公共的Db类进行操作,而无需针对不同的数据库写不同的代码和底层实现,Db类会自动调用相应的数据库驱动来处理。采用PDO方式,目前包含了Mysql、SqlServer、PgSQL、Sqlite等数据库的支持。

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);}

执行成功返回影响行数本#文来源gaodai$ma#com搞$$代**码网$

还有一种是根据条件来删除

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学习笔记之数据库的操作的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:thinkphp5.0学习笔记之数据库的操作

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址