摘要:一.数据库配置: 静态配置:在和应用目录同级的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.'条记录' : '没有记录被添加添加失败';
}
批改老师:韦小宝批改时间:2018-12-14 16:03:56
老师总结:看到你的作业就是知道肯定很不错!一如既往写的很棒!继续加油吧!