-
HelloController.php //數(shù)據(jù)模型之單表添加數(shù)據(jù) //增加數(shù)據(jù) $test = new Test;//實(shí)例化Test模型并保存在$test變量中 //id和title字段可以預(yù)先在保存之前通過(guò)屬性的方式賦值 $test->id = 3; $test->title = 'title3'; //在保存數(shù)據(jù)的時(shí)候,這些數(shù)據(jù)是用戶發(fā)送的請(qǐng)求當(dāng)中獲取的,保存前需要進(jìn)行數(shù)據(jù)的合法性驗(yàn)證,Test模型里有專門的函數(shù)驗(yàn)證。 $test->validate();//保存數(shù)據(jù)之前調(diào)用validate()方法啟用驗(yàn)證器rules()去判斷id和title符不符合保存的條件 if ($test->hasErrors()) { echo 'data is error!';//如果發(fā)生校驗(yàn)錯(cuò)誤,說(shuō)明數(shù)據(jù)不合法。 die;//結(jié)束掉程序,不讓它保存 } $test->save();//調(diào)用save()方法把它轉(zhuǎn)化為一條數(shù)據(jù)并保存在表單中 basic/models/Test.php //數(shù)據(jù)模型之單表添加數(shù)據(jù) //通過(guò)rules()函數(shù)驗(yàn)證保存前數(shù)據(jù)的合法性 public function rules(){ //返回一個(gè)數(shù)組,在數(shù)組里對(duì)每一個(gè)字段進(jìn)行驗(yàn)證 return[ ['id','integer'],//Yii提供了一個(gè)驗(yàn)證器(每個(gè)驗(yàn)證器都是一個(gè)類)的東西,比如integer驗(yàn)證器。 ['title','string','length'=>[0,5]] ]; }查看全部
-
//數(shù)據(jù)模型之單表刪除 //刪除數(shù)據(jù),先取出要?jiǎng)h除的數(shù)據(jù) /*$results = Test::find()->where(['id'=>1])->all(); $results[0]->delete();//調(diào)用delete()方法就可以刪除第一條數(shù)據(jù)*/ //刪除數(shù)據(jù)有個(gè)更快捷的方式:調(diào)用控制器當(dāng)中的deleteAll()方法把整個(gè)表里的數(shù)據(jù)刪掉;同時(shí)這個(gè)方法里也可以帶上查詢條件指定刪除哪部分的數(shù)據(jù)。 //Test::deleteAll('id>0'); Test::deleteAll('id>:id',array(':id'=>0));//deleteAll也支持占位符的功能查看全部
-
//這樣寫代碼不是太簡(jiǎn)潔,所以Yii框架對(duì)findBySql()直接運(yùn)行sql的方式進(jìn)行了一些改裝(把where查詢條件改裝成一個(gè)數(shù)組) //id=1的數(shù)據(jù)查詢,要想使用數(shù)組查詢需通過(guò)Test活動(dòng)記錄里的find()方法,這個(gè)方法會(huì)返回一個(gè)對(duì)象,再通過(guò)where()方法加上查詢條件 //$results = Test::find()->where(['id'=>1])->all(); //id>0 //$results = Test::find()->where(['>','id',0])->all(); //id>=1 and id<=2 /*$results = Test::find()->where(['between','id',1,2])->all(); print_r(count($results));*/ //title like "%title1%” //$results = Test::find()->where(['like','title','title1'])->all();//顯示1條數(shù)據(jù),包含title1的 /*$results = Test::find()->where(['like','title','title'])->all();//顯示包含title的所有數(shù)據(jù) print_r(count($results));*/ //查詢很多數(shù)據(jù)時(shí),這些數(shù)據(jù)一下子從數(shù)據(jù)庫(kù)拿到內(nèi)存當(dāng)中,內(nèi)存可能會(huì)扛不住。Yii框架針對(duì)這種情況也做了一些優(yōu)化(兩種形式)。 //第一種:查詢結(jié)果轉(zhuǎn)化為數(shù)組(對(duì)象占用內(nèi)存高于數(shù)組),Yii提供了asArray()方法。 $results = Test::find()->where(['between','id',1,2])->asArray()->all(); //第二種:批量查詢(每次規(guī)定拿n條數(shù)據(jù)放進(jìn)內(nèi)存中,處理完之后再去拿n條數(shù)據(jù),內(nèi)存始終保持著n條數(shù)據(jù)的占有量);batch()每次拿多少條記錄,拿完放到一個(gè)變量當(dāng)中。 /*foreach (Test::find()->batch(1) as $tests) { print_r(count($tests)); }*/ print_r($results);查看全部
-
//防sql注入,findBySql提供了一種占位符(:name[冒號(hào)+名字])的方式, $sql = 'select * from test where id=:id';//占位符:id加在Sql語(yǔ)句后面 //$results = Test::findBySql($sql,array(':id'=>1))->all();//通過(guò)findBySql的第2個(gè)參數(shù)array(把占位符換成用戶請(qǐng)求發(fā)送過(guò)來(lái)的真實(shí)的值)把用戶數(shù)據(jù)塞進(jìn)sql里,占位符的方式會(huì)把用戶傳遞過(guò)來(lái)的值(1 / 1 or 1=1)作為一個(gè)整體去處理,能運(yùn)行就運(yùn)行,不能運(yùn)行就報(bào)錯(cuò)。 $results = Test::findBySql($sql,array(':id'=>'1 or 1=1'))->all(); print_r($results);查看全部
-
//sql注入:有時(shí)候sql語(yǔ)句不是直接寫出來(lái)的,需要用戶傳遞過(guò)來(lái)的數(shù)據(jù)進(jìn)行配合,比如說(shuō)從瀏覽器提交過(guò)來(lái)的id=1。 $id = '1 or 1=1';//假如用戶提交過(guò)來(lái)的數(shù)據(jù)包含了一些特別的字符 $sql = 'select * from test where id='.$id;//那么$id和select語(yǔ)句拼接的結(jié)果為:select * from test where id=1 or 1=1;where條件始終為真的,那么查詢的結(jié)果就是select * from test,也就是把test表里的數(shù)據(jù)都查詢出來(lái)。 $results = Test::findBySql($sql)->all(); print_r($results);查看全部
-
HelloController.php use app\models\Test $sql = 'select * from test where id=1';//以前是直接運(yùn)行sql語(yǔ)句來(lái)查詢數(shù)據(jù) //在活動(dòng)記錄里也對(duì)這種方式提供了良好的支持,提供了一個(gè)靜態(tài)方法findBySql(),繼承于父類,可以直接運(yùn)行sql語(yǔ)句,也對(duì)sql注入有很好的防范支持。 $results = Test::findBySql($sql)->all();//運(yùn)行sql語(yǔ)句,之后會(huì)返回一個(gè)對(duì)象,再調(diào)用對(duì)象里的all()方法,就可以把查詢到的結(jié)果返回出來(lái)。all()方法返回?cái)?shù)據(jù)時(shí),會(huì)把每條記錄都包裝成一個(gè)對(duì)象,再把這些對(duì)象放進(jìn)一個(gè)數(shù)組里,最后把數(shù)組給返回出去。 print_r($results);查看全部
-
數(shù)據(jù)模型: 1,和表名一致的文件; 2,引入命名空間:namespace app\models; 3, 使用命名空間:use yii\db\ActiveRecord; 4, 創(chuàng)建與表名一致的類并繼承ActiveRecord; class tablename extends ActiveRecord{}查看全部
-
在視圖中顯示的數(shù)據(jù)一般會(huì)預(yù)先存儲(chǔ)在數(shù)據(jù)庫(kù)當(dāng)中,Yii框架中為了方便到數(shù)據(jù)庫(kù)中取(增刪改查)這些數(shù)據(jù),提供了一種數(shù)據(jù)模型的東西。Yii要想操控test這張表,必須知道test這張表在哪個(gè)數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)的地址在哪里,Yii框架專門提供了一個(gè)配置文件(basic/config/db.php)給我們。 advanced版的在common/main-local.php查看全部
-
1.加個(gè)with()將會(huì)關(guān)聯(lián)自動(dòng)查詢: $customers=Customer::find()->with('orders')->all(); 以上語(yǔ)句執(zhí)行的SQL: (1)select * from Customer; (2)select * from order where customer_id in(...); 2.循環(huán)執(zhí)行一次: foreach($customers as $customer){ $orders=$customer->orders; }查看全部
-
(1)ClassName()方法是ActiveRecord中的一個(gè)靜態(tài)方法 (2)代碼的封裝:在ActiveRecord中專門寫一個(gè)函數(shù)查看全部
-
快捷方法one()獲取數(shù)組中的一個(gè)數(shù)據(jù)查看全部
-
HelloController.php //視圖之?dāng)?shù)據(jù)塊 //return $this->render('home'); return $this->render('about'); common.php <!-- 視圖之?dāng)?shù)據(jù)塊:要想顯示數(shù)據(jù)塊的內(nèi)容,可以通過(guò)$this也就是視圖組件里的blocks數(shù)組去找剛剛定義的block1數(shù)據(jù)塊。 --> <!-- <h1>hello Common</h1> <?//=$this->blocks['block1'];?> <?//=$content;?> --> <!-- 假如在about視圖沒(méi)有定義block1數(shù)據(jù)塊,無(wú)法覆蓋布局文件中的h1標(biāo)簽里的內(nèi)容,那么希望還是使用布局文件common.php里的h1標(biāo)簽的內(nèi)容 --> <?php if(isset($this->blocks['block1'])):?> <?=$this->blocks['block1'];?> <?php else:?> <h1>hello Common</h1> <?php endif;?> <?=$content;?> home.php <!-- 視圖之?dāng)?shù)據(jù)塊,在視圖文件里定義一些數(shù)據(jù),覆蓋掉布局文件里h1的內(nèi)容。有點(diǎn)像面向?qū)ο罄锏母采w方法,子類定義了新方法可以覆蓋父類原來(lái)的方法 --> <!-- 要完成這種功能,Yii框架提供了一種數(shù)據(jù)塊的方式,先定義數(shù)據(jù)塊(視圖組件) --> <?php $this->beginBlock('block1');?> <!-- 給數(shù)據(jù)塊取名為block1 --> <h1>change by home</h1> <?php $this->endBlock();?> <!-- endBlock不需要傳遞參數(shù) --> about.php <!-- 視圖之?dāng)?shù)據(jù)塊 --> <!-- <?//php $this->beginBlock('block1');?> <h1>change by about</h1> <?//php $this->endBlock();?> -->查看全部
-
修改流程圖查看全部
-
添加數(shù)據(jù): helloController.php文件: $test = new Test;//實(shí)例化數(shù)據(jù)模型Test $test->id = 3; $test->title = 'title3'; $test->validate();//驗(yàn)證器,驗(yàn)證字段是否合法 if($test->hasErrors()){ echo 'data is error';//字段不合法 die; } $test->save(); //添加數(shù)據(jù)以及數(shù)據(jù)驗(yàn)證 // $test=new Test; // $test->id=6; // $test->title="Title531231231"; // //數(shù)據(jù)驗(yàn)證,驗(yàn)證器,驗(yàn)證字段是否合法 // $test->validate(); // if($test->hasErrors()){ // echo 'data is error'; // die; // } // $test->save(); //修改單表數(shù)據(jù) $test=Test::find()->where(['id'=>4])->one(); $test->title='title4444'; $test->save();查看全部
-
增加流程圖:查看全部
舉報(bào)
0/150
提交
取消