thinkphp5.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);
}
执行成功返回影响行数;
还有一种是根据条件来删除的
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学习笔记(四)数据库的操作的更多相关文章
- thinkphp5.0学习笔记
2019-11-11学习笔记 安装TP5.0 a)源代码包下载 在thinkphp官网下载(www.thinkphp.cn)下载 完整版本的TP5.0 b) composer 安装 切换到网站的根目录 ...
- Flask学习笔记:数据库ORM操作MySQL+pymysql/mysql-python+SQLAlchemy/Flask-SQLAlchemy
Python中使用sqlalchemy插件可以实现ORM(Object Relationship Mapping,模型关系映射)框架,而Flask中的flask-sqlalchemy其实就是在sqla ...
- thinkphp5.0学习笔记(三)获取信息,变量,绑定参数
1.构造函数: 控制器类必须继承了\think\Controller类,才能使用: 方法_initialize 代码: <?php namespace app\lian\controller; ...
- Flask学习笔记:数据库迁移操作flask-script+alembic/flask-migrate
数据库迁移是将代码中模型类(即表)的修改同步到数据库中, flask-sqlalchemy的模型类一旦使用create_all()映射到数据库中后,对这个模型类的修改(例如添加了一个新的字段)就不会再 ...
- ThinkPHP 学习笔记 ( 四 ) 数据库操作之关联模型 ( RelationMondel ) 和高级模型 ( AdvModel )
一.关联模型 ( RelationMondel ) 1.数据查询 ① HAS_ONE 查询 创建两张数据表评论表和文章表: tpk_comment , tpk_article .评论和文章的对应关系为 ...
- thinkphp5.0学习笔记(二)
本文为公司制作API接口后台的小结! 1.命名注意事项: 不要使用易混淆的名字,如index,index01... 我喜欢用拼音... 比如: public function zhuce(Reques ...
- thinkphp5.0学习笔记(二)API后台处理与命名空间
命名空间 先来看命名空间吧: 命名空间是学习TP的基础, <?php namespace app\lian\c1; class yi{ public $obj = "这是第一个空间里面 ...
- thinkphp5.0学习笔记(一)基础知识与URL访问
1.目录结构: 其中thinkphp子目录是框架核心目录 thinkphp结构: 2.入口文件 默认自带的入口文件位于public/index.php 应用目录为application,其结构: in ...
- openresty 学习笔记四:连接mysql和进行相关操作
openresty 学习笔记四:连接mysql和进行相关操作 毕竟redis是作为缓存,供程序的快速读写,虽然reidis也可以做持久化保存,但还是需要一个做数据存储的数据库.比如首次查询数据在red ...
随机推荐
- poj1990树状数组
Every year, Farmer John's N (1 <= N <= 20,000) cows attend "MooFest",a social gather ...
- 利用PHPExcel读取Excel的数据和导出数据到Excel
PHPExcel是一个PHP类库,用来帮助我们简单.高效实现从Excel读取Excel的数据和导出数据到Excel.也是我们日常开发中,经常会遇到的使用场景.比如有个客户信息表,要批量导出发给同事,我 ...
- 简单的3D图片轮播dome
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- POJ3252-Round Numbers 数学
题目链接:http://poj.org/problem?id=3252 题目大意: 输入两个十进制正整数a和b,求闭区间 [a ,b] 内有多少个Round number 所谓的Round Numbe ...
- Android ec环境配置
ec环境配置 1.0概述 鉴于很多同事,或者新从事android开发,虽然会做android的开发,但是会遇见一些最基本的环境搭建问题,本文仅作为(win7 64位系统)eclipse中集成andro ...
- 关于bootstrap table 的可编辑列表的实例
最近被安排到一个新的项目里,首先被分配了一个成果管理的模块,虽然是简单的增删改查,但是也费了不少功夫. 其中耽误最长的时间就是form中嵌套了两个可编辑列表的子表.废话不说上干货 = = 参考资料 1 ...
- 开涛spring3(6.3) - AOP 之 6.3 基于Schema的AOP
6.3 基于Schema的AOP 基于Schema的AOP从Spring2.0之后通过“aop”命名空间来定义切面.切入点及声明通知. 在Spring配置文件中,所以AOP相关定义必须放在<a ...
- 开涛spring3(4.1) - 资源 之 4.1 基础知识
4.1.1 概述 在日常程序开发中,处理外部资源是很繁琐的事情,我们可能需要处理URL资源.File资源资源.ClassPath相关资源.服务器相关资源 (JBoss AS 5.x上的VFS资源)等 ...
- linux centos7.0安装subversion
安装环境以及软件版本如下: subversion使用1.8.17版本,CentOS7.0(64位) 安装svn共需要使用如下软件,apr-1.5.2.tar.gz.apr-util-1.5.4.tar ...
- fiddler导致页面确定按钮无法使用(测试遇到的问题经验)
这几天在测试的是遇到几个问题,就是在删除或者保存有些提示信息的时候 比如下面这种: 点击确定的时候,一直无响应,换了几台电脑其他电脑都是正常的,本机清楚缓存.关闭浏览器重新打开.重启电脑都试过了了就是 ...