Db类基本使用
我们在使用Db类时,需要引入think\Db
。
使用原生SQL
Db::query() 查询操作
Db::excute() 插入、更新、删除操作
Db::getLastInsID( ) 获取最后一行记录的ID
Db::getNumRows( ) 被影响记录条数
示例
1. 查询操作(参数绑定)
Db::query(
"select * from banner_item where banner_id=?",[$id]
);
2. 插入操作
Db:excute(
"insert tbl_name VALUE(value...)"
);
3. 更新操作(参数绑定)
Db::execute(
"update think_user set name=:name where status=:status",
['name' => 'thinkphp', 'status' => 1]
);
4. 删除操作
Db:excute(
"DELETE FROM tbl_name WHERE id > :id;",
['id'=>'10']
);
查询构造器
第一步:选取表
Db::table( 表名 ) // 必须填写完整的数据表名!!!
Db::name( 表名 ) // 如果指定了数据表前缀,建议使用name
添加数据
1. 添加一条数据
// 返回添加成功的条数,通常是1
Db::name('user')
->insert(['name' => '张三']);
或者
// 如果数据表里没有某些字段,会抛出异常
Db::name('user')
->data(['name' => '张三', 'age' => 1])
->insert();
2. 添加多条数据
// 返回添加成功的条数
$data = [
['foo' => 'bar', 'bar' => 'foo'],
['foo' => 'bar1', 'bar' => 'foo1'],
['foo' => 'bar2', 'bar' => 'foo2']
];
Db::name('user')->insertAll($data);
或者
// 要确保字段信息正确
$data = [
['foo' => 'bar', 'bar' => 'foo'],
['foo' => 'bar1', 'bar' => 'foo1'],
['foo' => 'bar2', 'bar' => 'foo2']
];
Db::name('user')->data($data)->insertAll();
删除数据
// 根据主键删除
Db::name('user')->delete(1);
// 条件删除
Db::name('user')->where('id','<',10)->delete();
更新数据
update()
setInc(字段,值) 字段值递增
setDec(字段,值) 字段值递减
setField(字段,值) 更新指定字段值
示例
1. 普通更新字段
// update传入数据,返回影响条数
Db::name('user')
->where('id', 1)
->update(['name' => 'thinkphp']);
// data传入数据
Db::name('user')
->where('id', 1)
->data(['name' => 'thinkphp'])
->update();
2. 字段递增
Db::name('user')
->where('id', 1)
->setInc('score');
3. 字段递减
Db::name('user')
->where('id', 1)
->setDec('score');
4. 更新指定字段值
Db::name('user')
->where('id',1)
->setField('name', 'thinkphp');
查询数据
find() 查询一条记录
findOrEmpty() 如果查询不到数据,返回空数组而不是null(5.1.23+版本)
select() 查询多条记录
value() 查询某个字段的值
column(‘列名’[,'索引字段']) 查询某个列的值
示例
1.查询一条记录
Db::name('user')->where('id',1)->find();
Db::name('user')->where('id',1)->findOrEmpty();
2.查询多条记录
Db::name('item')
->where('banner_id','=',$id)
->select();
3.查询某个字段
Db::name('user')->where('id',1)->value('name');
4.查询某个列
Db::name('user')->where('status',1)->column('name');
// 查询某个列,并且使用id字段作为索引
Db::name('user')->where('status',1)->column('name','id');
5. 多条件查询(版本5.1.25+)
// 使用命名占位符绑定 系统会自动转换为?占位符方式
// 因此必须确保你的变量绑定顺序和占位符顺序一致
Db::name('user')
// 正确
->where('where id=? AND status=?', ['id' => 8, 'status' => 1])
->where('where id=? AND status=?', [ 8, 1])
// 错误
//->where('where id=:id AND status=:status', [ 'status' => 1, 'id' => 8])
->select();
6. where对象查询(版本5.1.21+)
需要先引入 think\db\Where
1)单独使用where对象查询
$where = new Where;
$where['id'] = ['in', [1, 2, 3]];
$where['title'] = ['like', '%php%'];
Db::name('user')
->where($where)
->select();
2)和其他查询方式混合使用
$where = new Where;
$where['id'] = ['in', [1, 2, 3]];
$where['title'] = ['like', '%php%'];
Db::name('user')
->where($where->enclose())
->where('status', 1)
->select();
最后生成的sql:
SELECT * FROM `think_user` WHERE ( `id` IN (1,2,3) AND `title` LIKE '%php%' ) AND `status` =1
enclose()的作用就是给where查询条件加上括号。
聚合查询
示例
1.统计字段
Db::table('think_user')->count();
2.最值
Db::table('think_user')->max('score');
Db::table('think_user')->min('score');
3.平均值
Db::table('think_user')->avg('score');
4.总和
Db::table('think_user')->sum('score');
参考资料: