abstract:一.數(shù)據(jù)庫(kù)配置: 靜態(tài)配置:在和應(yīng)用目錄同級(jí)的config/database.php中進(jìn)行配置 動(dòng)態(tài)配置:使用connect()進(jìn)行配置二.原生查詢(xún) 代碼中直接寫(xiě)原生sql語(yǔ)句 叫做原生查詢(xún) 需要引用th
一.數(shù)據(jù)庫(kù)配置:
靜態(tài)配置:在和應(yīng)用目錄同級(jí)的config/database.php中進(jìn)行配置
動(dòng)態(tài)配置:使用connect()進(jìn)行配置
二.原生查詢(xún)
代碼中直接寫(xiě)原生sql語(yǔ)句 叫做原生查詢(xún)
需要引用think\Db類(lèi) use think\Db;
查詢(xún):不僅僅是讀,還包括寫(xiě)操作,CURD :增刪改查
execute()專(zhuān)用做寫(xiě)操作:新增,更新,刪除 可以使用占位符來(lái)對(duì)sql語(yǔ)句進(jìn)行賦值 :占位符 通用占位符為?不推薦使用
query()用作讀操作,也就是查詢(xún)操作 可以使用占位符來(lái)對(duì)sql語(yǔ)句進(jìn)行賦值 :占位符 通用占位符為?不推薦使用
如下
public function select() { //查詢(xún)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類(lèi)型,需要限定下格式 \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"; //依舊是整數(shù)類(lèi)型 ,限定下類(lèi)型,否則傳入字符串類(lèi)型 Db::execute($sql,['salary'=>[7000,\PDO::PARAM_INT],'staff_id'=>[10,\PDO::PARAM_INT]]); //如果更新失敗,會(huì)自動(dòng)終止運(yùn)行并拋出異常 return '更新成功'; }
三.查詢(xún)構(gòu)造器
1.查詢(xún)操作 返回一個(gè)二位數(shù)組 沒(méi)有匹配的記錄則返回一個(gè)空數(shù)組 【盡量不在終極方法中傳參數(shù)】
* find():查詢(xún)單條記錄 select()查詢(xún)多條記錄 table('數(shù)據(jù)表') 設(shè)置查詢(xún)的數(shù)據(jù)表 field('字段1,字段2,...')或者數(shù)組格式傳入field(['字段1','字段2'...]) 返回指定的字段 新版本數(shù)組格式不再支持中文別名 where()查詢(xún)條件 具體操作如下
public function find() { //查詢(xún)單條記錄 $res = Db::table('staff') // ->field('name,sex,salary') // ->field(['name','sex','salary']) //新版本數(shù)組格式不再支持中文別名 ->field('name as 姓名,sex as 性別,salary as 工資') //字符串可以別名中文 ->where('staff_id','>',10) //'='可以省略 主鍵大于10的第一條 ->find(); dump($res); } public function select() { //查詢(xún)滿(mǎn)足條件的多條記錄 $res = Db::table('staff') ->field('name as 姓名,sex as 性別,salary as 工資') // ->where('salary > 3000') ->where('salary', '>' ,'3000') // ->order('salary DESC') //DESC降序 默認(rèn)ASC 升序 ->order('salary','ASC') //DESC降序 默認(rèn)ASC 升序 ->limit(5) //只輸出5條 ->select(); dump($res); }
2.新增方法 寫(xiě)操作返回受影響的記錄條數(shù) insert() 新增一條數(shù)據(jù) insertAll() 新增多條記錄 data() 將數(shù)據(jù)打包 方法如下 Db::getLastInsID() 返回新增的最后一個(gè)主鍵 insertGetId() 新增并返回主鍵 操作如下
public function insert() { //新增單條記錄 insert() $data = [ 'name' => '美國(guó)隊(duì)長(zhǎng)', '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 : '沒(méi)有記錄被添加添加失敗'; //data($data) :將要處理的數(shù)據(jù)打包 option[] //insertGetId() == insert()+getLastInsID() // // $id = Db::table('staff')->insertGetId($data1); // return $id ? '添加成功id='.$id : '沒(méi)有記錄被添加添加失敗'; // $num = Db::table('staff') // ->data($data) //打包數(shù)據(jù) // ->insert(); // $id = Db::getLastInsID(); //返回最后新增的主鍵id // return $num ? '添加成功id='.$id : '沒(méi)有記錄被添加添加失敗'; //新增多條記錄:insertAll() $data = [ ['name'=>'鋼鐵俠','sex'=>0,'salary'=>7000], ['name'=>'班納','sex'=>0,'salary'=>500], ['name'=>'鷹眼','sex'=>0,'salary'=>5000], ]; $num = Db::table('staff') ->data($data) //打包數(shù)據(jù) ->insertAll(); return $num ? '添加成功'.$num.'條記錄' : '沒(méi)有記錄被添加添加失敗'; }
3.更新操作 update() 更新操作必須是基于前置查詢(xún),不允許無(wú)條件更新 如果更新條件有主鍵 可以直接傳入data()中 Db::raw()可以實(shí)現(xiàn)自增操作等 操作如下
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.'條記錄' : '沒(méi)有記錄被添加添加失敗'; }
4.刪除操作 delete() 刪除也是必須基于前置查詢(xún),不允許無(wú)條件刪除
* 刪除數(shù)據(jù)是一個(gè)及其危險(xiǎn)的操作,建議使用框架軟刪除來(lái)實(shí)現(xiàn),用更新來(lái)模擬刪除
* 在實(shí)際的開(kāi)發(fā)過(guò)程中,盡可能不要在控制器直接操作數(shù)據(jù)庫(kù),而是采用模型來(lái)實(shí)現(xiàn)
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.'條記錄' : '沒(méi)有記錄被添加添加失敗'; }
Correcting teacher:韋小寶Correction time:2018-12-14 16:03:56
Teacher's summary:看到你的作業(yè)就是知道肯定很不錯(cuò)!一如既往寫(xiě)的很棒!繼續(xù)加油吧!