abstract:一.数据库配置: 静态配置:在和应用目录同级的config/database.php中进行配置 动态配置:使用connect()进行配置二.原生查询 代码中直接写原生sql语句 叫做原生查询 需要引用th
一.数据库配置:
静态配置:在和应用目录同级的config/database.php中进行配置
动态配置:使用connect()进行配置
二.原生查询
代码中直接写原生sql语句 叫做原生查询
需要引用think\Db类 use think\Db;
查询:不仅仅是读,还包括写操作,CURD :增删改查
execute()专用做写操作:新增,更新,删除 可以使用占位符来对sql语句进行赋值 :占位符 通用占位符为?不推荐使用
query()用作读操作,也就是查询操作 可以使用占位符来对sql语句进行赋值 :占位符 通用占位符为?不推荐使用
如下
public function select() { //查询staff表,salary大于5000的员工信息 $sql = "SELECT `name`,`salary` FROM `staff` WHERE `salary`>5000 LIMIT 5"; //用通用占位符"?",防止sql注入攻击 $sql = "SELECT `name`,`salary` FROM `staff` WHERE `salary`>? LIMIT ?"; //用命名占位符":" $sql = "SELECT `name`,`salary` FROM `staff` WHERE `salary`> :salary LIMIT :limit"; //通用占位符 ,顺序不可改变 // $res = Db::query($sql,[5000,5]); //命名占位符,顺序可以改变, // $res = Db::query($sql,['salary'=>5000,'limit'=>5]); //使用占位符,传入INT类型,需要限定下格式 \PDO::PARAM_格式 $res = Db::query($sql,['salary'=>[5000,\PDO::PARAM_INT],'limit'=>[5,\PDO::PARAM_INT]]); dump($res); } //更新操作 public function update() { //将id=10的员工,工资修改为7000 $sql = "UPDATE `staff` SET `salary`=:salary WHERE `staff_id` = :staff_id"; //依旧是整数类型 ,限定下类型,否则传入字符串类型 Db::execute($sql,['salary'=>[7000,\PDO::PARAM_INT],'staff_id'=>[10,\PDO::PARAM_INT]]); //如果更新失败,会自动终止运行并抛出异常 return '更新成功'; }
三.查询构造器
1.查询操作 返回一个二位数组 没有匹配的记录则返回一个空数组 【尽量不在终极方法中传参数】
* find():查询单条记录 select()查询多条记录 table('数据表') 设置查询的数据表 field('字段1,字段2,...')或者数组格式传入field(['字段1','字段2'...]) 返回指定的字段 新版本数组格式不再支持中文别名 where()查询条件 具体操作如下
public function find() { //查询单条记录 $res = Db::table('staff') // ->field('name,sex,salary') // ->field(['name','sex','salary']) //新版本数组格式不再支持中文别名 ->field('name as 姓名,sex as 性别,salary as 工资') //字符串可以别名中文 ->where('staff_id','>',10) //'='可以省略 主键大于10的第一条 ->find(); dump($res); } public function select() { //查询满足条件的多条记录 $res = Db::table('staff') ->field('name as 姓名,sex as 性别,salary as 工资') // ->where('salary > 3000') ->where('salary', '>' ,'3000') // ->order('salary DESC') //DESC降序 默认ASC 升序 ->order('salary','ASC') //DESC降序 默认ASC 升序 ->limit(5) //只输出5条 ->select(); dump($res); }
2.新增方法 写操作返回受影响的记录条数 insert() 新增一条数据 insertAll() 新增多条记录 data() 将数据打包 方法如下 Db::getLastInsID() 返回新增的最后一个主键 insertGetId() 新增并返回主键 操作如下
public function insert() { //新增单条记录 insert() $data = [ 'name' => '美国队长', 'sex' => 0, 'age' => 98, 'salary' => 6000 ]; $data1 = [ 'name' => '蚁人', 'sex' => 0, 'age' => 98, 'salary' => 6000 ]; // $num = Db::table('staff') // ->insert($data); // $id = Db::getLastInsID(); //返回最后新增的主键id // return $num ? '添加成功id='.$id : '没有记录被添加添加失败'; //data($data) :将要处理的数据打包 option[] //insertGetId() == insert()+getLastInsID() // // $id = Db::table('staff')->insertGetId($data1); // return $id ? '添加成功id='.$id : '没有记录被添加添加失败'; // $num = Db::table('staff') // ->data($data) //打包数据 // ->insert(); // $id = Db::getLastInsID(); //返回最后新增的主键id // return $num ? '添加成功id='.$id : '没有记录被添加添加失败'; //新增多条记录:insertAll() $data = [ ['name'=>'钢铁侠','sex'=>0,'salary'=>7000], ['name'=>'班纳','sex'=>0,'salary'=>500], ['name'=>'鹰眼','sex'=>0,'salary'=>5000], ]; $num = Db::table('staff') ->data($data) //打包数据 ->insertAll(); return $num ? '添加成功'.$num.'条记录' : '没有记录被添加添加失败'; }
3.更新操作 update() 更新操作必须是基于前置查询,不允许无条件更新 如果更新条件有主键 可以直接传入data()中 Db::raw()可以实现自增操作等 操作如下
public function update() { //将工资小于等于5000的员工,加薪1000 // $num = Db::table('staff') // ->where('salary','<=',4000) // ->data(['salary'=>Db::raw('salary+1000')]) // ->update(); $num = Db::table('staff') ->update(['sex'=>1,'staff_id'=>45]); return $num ? '更新成功'.$num.'条记录' : '没有记录被添加添加失败'; }
4.删除操作 delete() 删除也是必须基于前置查询,不允许无条件删除
* 删除数据是一个及其危险的操作,建议使用框架软删除来实现,用更新来模拟删除
* 在实际的开发过程中,尽可能不要在控制器直接操作数据库,而是采用模型来实现
public function delete() { // $num = Db::table('staff')->delete(18); //删除 // $num = Db::table('staff')->delete([12,13,17]); $num = Db::table('staff') // ->where('staff_id','15') ->where('salary','>',10000) ->delete(); $num = Db::table('staff')->delete(true); //清空表 return $num ? '删除成功'.$num.'条记录' : '没有记录被添加添加失败'; }
Correcting teacher:韦小宝Correction time:2018-12-14 16:03:56
Teacher's summary:看到你的作业就是知道肯定很不错!一如既往写的很棒!继续加油吧!