五、ThinkPHP数据库操作

本文详细介绍了ThinkPHP框架下数据库的连接与操作方法,包括原生SQL语句的执行、数据的增删改查、条件筛选及聚合查询等功能,特别强调了软删除特性的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、连接数据库

在config/database.php内修改相应配置参数
值得注意的是,可以添加默认表前缀,如:

prefix => 'tp_'

表示所有的表默认拥有前缀tp_,使用该表时不必再加此前缀

1.1、执行原生sql语句

执行原生sql语句时,支持参数注入

//查询 后面的[]中绑定参数
Db::query("select * from tp_user where id=? and age=?",[1,18]);
//更新
Db::execute("update tp_user set name=:name where age=:age",['name'=>'xiaoming','age']=>20)
//添加
$sql = "insert into tp_user(id,name,age) values(:id,:name:age)";
Db::execute($sql,['id'=>1,'name'=>'xioaming','age'=>18]);
//删除
$sql = "delete from tp_user where id=:id";
Db:execute($sql,['id'=>1]);

1.2、Db类添加数据

有三种方法,分别是

Db::table("tableName");
Db::name("tableName");
db("tablename");

三种方式的使用方法相同,不同的是如果在database.php中设置了表前缀,则除table方法其他的两个方法都不需要在表前面加前缀,二使用db()函数的方式又可以省去引入think\Db命名空间的步骤,所以这里注重介绍最简单的用法

$data = ['id' => 1,'name' => 'xiaoming','age' => '18'];
Db::table('tp_user') -> insert($data);
Db::name('user') -> insert($data);
db('user') -> insert($data);
//如需返回自增主键
$id = db('user') -> insertGetId($data);
//添加多条数据
$data = [
	['id' => 1,'name' => 'xiaoming','age' => '18'],
	['id' => 2,'name' => 'xiaogang','age' => '19'],
	['id' => 3,'name' => 'xiaohong','age' => '20']
];
db('user') -> insertAll($data);

1.3、更新数据

格式为db('表名') -> where('字段名',’运算符‘,‘条件’) -> update(‘sql语句’);
例如:将user表中id为1的用户名改为laowang

db('user') -> where('id','=',1) -> update(['name' => 'laowang']);
//ThinkPHP5.1.7后支持了Db::raw的写法
db('user') -> where('id','=','1') -> update([
	click -> Db::raw('click+1');
]);

1.4、删除数据

//根据主键删除
db('user') -> delete(1);
//可以一次删除多个主键
db('user') -> delete([1,2,3]);

//条件删除(其实当运算符为‘=’时可以省略运算符,但还是都写上保险)
db('user') -> where('age','=','18') -> delete();
db('user') -> where('age','>','18') -> delete();

//无条件删除所有数据
db('user') -> delete(true);

一个重要的内容时软删除,软删除的本质不是删掉数据,而是在相应行加上一个标记字段,使得该数据查询时不被显示出来,实际上没有被真正删除

首先要在表中建立一个软删除字段,并设置默认值

useSoftDelete('软删除字段','表示被删除的值')

例如:
user表中设置delete_key字段,默认值为0,改为1时表示被删除

db('user') -> where('id','=','1') -> useSoftDelete('delete_key',1) -> delete();

1.4、查询数据

//查询一条数据
db('user') -> find(1);//find里面填写主键id
//希望找不到该行就抛出异常
db('user') -> where('id',1) -> findOrFail();

//条件查询
db('user') -> where('id','>','1') -> select();
//同样找不到就抛出异常
db('user') -> where('id','>','1') -> selectOrFail();

//查询某个字段
db('uaer') -> where('id','=','1') -> value('name');

//查询某一列
db('user') -> where('id','=','1') -> column('name');

//获取指定数目和排序方式
db('user') -> order('id','desc') -> limit(0,5) -> select();

//聚合查询 和mysql的聚合查询相似
db('user') -> count();
db('user') -> max('age');
db('user') -> avg('age');
db('user') -> where('id',10) -> sum('score');

//批量查询多个字段
//查询条件
$value = [
	['name','like','xiao%'],
	['age','>',18],
	['local','like','shandong%']
];
//进行查询
db('user') -> where($value) -> select();

//闭包查询
$name = 'xiaoming';
db(user) -> where(function($query) user ($name,$id)){
	$query -> where('name',$name) -> whereOr('id','>',$id);
} -> select();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值