abstrait:原生查詢,盡量不使用,使用構(gòu)造器。class Demo { //1. 原生查詢是直接調(diào)用Connection類中的query()和execute()來(lái)實(shí)現(xiàn)。 //2. query()實(shí)現(xiàn)讀操作,主要用于select語(yǔ)句和存儲(chǔ)過(guò)程的查詢。
原生查詢,盡量不使用,使用構(gòu)造器。
class Demo { //1. 原生查詢是直接調(diào)用Connection類中的query()和execute()來(lái)實(shí)現(xiàn)。 //2. query()實(shí)現(xiàn)讀操作,主要用于select語(yǔ)句和存儲(chǔ)過(guò)程的查詢。 //3. execute()實(shí)現(xiàn)寫(xiě)操作,例如新增,更新與刪除等。 public function select() { echo "select 方法"; //用命名占位符: 用關(guān)聯(lián)數(shù)組(順序可以隨意) $sql="SELECT namecn,id FROM about WHERE id> :id LIMIT :num"; //$res=Db::query($sql,['id'=>3,'num'=>3]); //[ SQL ] SELECT namecn,id FROM about WHERE id> '3' LIMIT '3' [ RunTime:0.000270s ] //參數(shù)默認(rèn)傳入的是字符串,所以還需要轉(zhuǎn)換 $res=Db::query($sql,['id'=>[3,\PDO::PARAM_INT],'num'=>[3,\PDO::PARAM_INT]]); //[ SQL ] SELECT namecn,id FROM about WHERE id> 3 LIMIT 3 [ RunTime:0.000403s ] dump($res); } public function update() { //更新操作 $sql="UPDATE about SET introctioncn = :introction WHERE id= :num "; //注意,:后面不能有空格 Db::execute($sql,['introction'=>'更新字段值','num'=>[19,\PDO::PARAM_INT]]); //如果操作失敗,會(huì)自動(dòng)終止運(yùn)行,并輸出異常 return '更新成功'; } }
一、新增單條記錄 INSERT()
public function insert() { //新增單條記錄 $data=[ 'namecn'=>'榮譽(yù)', 'introctioncn'=>'榮譽(yù)描述', 'orderid'=>'2' //注意是以英文逗號(hào)分開(kāi),不是以分號(hào),經(jīng)常容易犯錯(cuò)。最后一個(gè)不要分號(hào),可以練成一行去寫(xiě),這樣就可以知道后面不需要分號(hào)了 ]; $num=Db::table('about') ->data($data) ->insert(); //行與行之間沒(méi)有分隔符號(hào),理解為$num=Db::table('about')->data($data)->insert();即可 $id=Db::getLastInsID(); return $num ? 'data方式新增單條記錄,一般最常用的就是這個(gè)。添加記錄,id='.$id : 'No記錄'; //inserrGetId()==insert()+getLaseInseID() 直接二合一操作 //$num=Db::table('about')->insertGetId($data); //return $num ? 'insertGetId方式新增單條記錄,添加記錄,id='.$num : 'No記錄'; //一般不會(huì)在find 和select后面加參數(shù),這方法叫終結(jié)方法,不是鏈?zhǔn)秸{(diào)用 //一般不會(huì)在find 和select后面加參數(shù),這方法叫終結(jié)方法,不是鏈?zhǔn)秸{(diào)用 }
二、新增多條記錄 INSERTALL()
public function insertall() { $data=[ ['namecn'=>'技術(shù)','introctioncn'=>'程序員','orderid'=>'1'], ['namecn'=>'UI','introctioncn'=>'美女','orderid'=>'2'], ['namecn'=>'架構(gòu)師','introctioncn'=>'男的多','orderid'=>'3'] ]; $num=Db::table('about')->data($data)->insertAll(); // INSERT INTO `about` (`namecn` , `introctioncn` , `orderid`) VALUES ( '技術(shù)','程序員',1 ) , ( 'UI','美女',2 ) , ( '架構(gòu)師','男的多',3 ) [ RunTime:0.002119s ] return $num ? 'insertAll方式新增多條記錄,添加記錄為'.$num : 'No記錄'; }
三、查詢
備注:->field(['id'=>'主鍵','namecn'=>'名稱','introctioncn'=>'簡(jiǎn)介'])
查詢中使用別名的方法都不成功(find和select都一樣),提示(不支持的數(shù)據(jù)表達(dá)式);使用環(huán)境是iis7.5,php5.6或7
if ($strict && !preg_match('/^[\w\.\*]+$/', $key)) { throw new Exception('not support data:' . $key); }
3.1 find()方法
public function find() //find只能支持主鍵,不能放條件 { //查詢單條記錄 //$res=Db::table('about')->find(19);//查詢主健為19的記錄 //table 獲取完整的表名,find獲取滿足條件的第一一條 //另外一種寫(xiě)法 $res=Db::table('about') //->field('id,namecn,introctioncn') //查詢指定的列,如果全部查詢,可以省略此條件 //->where('id','>',19) //where(字段 表達(dá)式 值) ->field(['id','namecn','introctioncn']) //放在數(shù)組中,可以直接使用 //->field(['id'=>'主鍵','namecn'=>'名稱','introctioncn'=>'簡(jiǎn)介']) //別名 ->where('id','>',19) //where(字段 表達(dá)式 值) ->find();//查詢主健為19的記錄 dump($res); }
3.2 select()
public function select() { $res=Db::table('about') //鏈?zhǔn)秸{(diào)用 ->field(['id','namecn','introctioncn']) //->field(['id'=>'序號(hào)','namecn'=>'標(biāo)題','introctioncn'=>'描述']) //不支持 // //->where('id'>15) //字符串形式 ->where('id','>',15) //表達(dá)式 //->order('orderid asc') ->order('orderid', 'asc')//表達(dá)式 ->limit(3) ->select(); dump($res); }
四、更新 UPDATE()
public function update() { //更新操作必須是基于前置查詢,不允許無(wú)條件更新,否則不能執(zhí)行 //update()也是一個(gè)終極方法 //將排序小于等于2的記錄,增加3 /*$num= Db::table('about') ->where('orderid','<=',2) ->data(['orderid'=>Db::raw('orderid+3')])//raw獲取原始數(shù)據(jù),不轉(zhuǎn)譯(否則orderid是字符串,表達(dá)式會(huì)出錯(cuò),不能相加);data是數(shù)組,所以用[] ->update();*/ //更新多條記錄 $num=Db::table('about') ->update(['orderid'=>20,'id'=>25]);//根據(jù)條件更新單條記錄 return $num ? '更新成功,更新'.$num.'記錄' : 'No記錄'; }
注意:raw獲取原始數(shù)據(jù),不轉(zhuǎn)譯
五、刪除 DELETE()
public function delete() { //刪除必須基于前置查詢,不允許無(wú)條件刪除 //delete() 終極方法 $num=Db::table('about')->delete(24); return $num ? '單條記錄刪除,刪除'.$num.'記錄' : 'No記錄'; /*$num=Db::table('about')->delete([25,26,27]); //多條記錄以數(shù)組的方式記錄 return $num ? '多條記錄刪除,刪除'.$num.'記錄' : 'No記錄';*/ //$num=Db::table('about')->where('id',28)->delete(); /* $num=Db::table('about') ->where('id','>',29) //鏈?zhǔn)椒椒ǎ奖汩喿x及寫(xiě)注釋 ->delete(); return $num ? '多條記錄刪除,刪除'.$num.'記錄' : 'No記錄';*/ /*$num=Db::table('about') ->where(ture) //這樣也可以刪除,一般不這么寫(xiě) ->delete();*/ /* $num=Db::table('about')->delete(ture);//清空about表的所有數(shù)據(jù),建議使用軟刪來(lái)實(shí)現(xiàn),用更新來(lái)模式刪除 return $num ? '多條記錄刪除,刪除'.$num.'記錄' : 'No記錄';*/ //在實(shí)際的開(kāi)發(fā)過(guò)程中,盡可能不要在控制器中直接操作數(shù)據(jù)庫(kù),而是采用模式來(lái)實(shí)現(xiàn) //模型都是基于數(shù)據(jù)庫(kù)操作, }
Professeur correcteur:韋小寶Temps de correction:2018-11-16 09:07:24
Résumé du professeur:看到了你的問(wèn)題!這個(gè)問(wèn)題在工單中出現(xiàn)過(guò)!你可以將field中的方括號(hào)去掉!然后將 =>改寫(xiě)成as。工單中相同問(wèn)題參考:http://ipnx.cn/wenda/143034.html