CodeIgniter把URL中參數值爲0的過濾掉了,傳遞的參數爲0實際是NULL,測試了一下TP5是沒有過濾的,這樣用CI中帶的函數就沒辦法區分URL中的參數是0仍是沒傳遞參數,只能用最原始的$_GET、$_POST、$_REQUEST了javascript
標籤顯示激活狀態(即class="active")php
CodeIgniter實現:html
方法一:java
class="<?php if(current_url()==site_url('/book/book_list')) echo 'active';?>" 注意,若是是網站根目錄,則要這麼寫<?php if(current_url()==site_url()) echo 'active';?> 不是site_url('/'),由於site_url('/')會在結尾多一個/斜線
方法二(推薦):sql
$this->router->fetch_class();//獲取控制器名 $this->router->fetch_method();//獲取方法名 class="<?php if($this->router->fetch_class().'/'.$this->router->fetch_method()=='welcome/index') echo 'active';?>"
固然也能夠用js來實現:數據庫
$(document).ready(function(e){ var url=window.location $('.treeview-menu a').each(function(e){ var link = $(this).attr('href'); if(link==url){ $(this).parent('li').addClass('active'); $(this).closest('.treeview').addClass('active'); } });
Model查詢構造器數組
public function getExample($book_id) { $where = array(); if( ! empty($book_id)) { $where = array('book_id'=>$book_id); } $result = $this->db->get_where(self::TABLE,$where)->result_array(); //或者row_array()返回一行記錄的一維數組 return $result; } public function getExampleList($id,$limitCount = 0,$limitBegin = 0){ $order = 'add_time desc'; $where = array( 'at.id' => $uid, 'at.status' => 1 ); $this->db->select(' at.id subject_id, bt.id user_id, (select title from wx_course wc where wc.id = at.course_id) course_name, ',false); //第二個參數可選,若是設置爲 FALSE,CodeIgniter 將不保護你的 表名和字段名,這在當你編寫複合查詢語句時頗有用,不會破壞你編寫的語句。@城市之霧 $this->db->from('a_table at'); $this->db->join('b_table bt','at.hello_id = bt.id'); if($limitCount) { $this->db->limit($limitCount,$limitBegin); } $result = $this->db->where($where)->get()->result_array(); return $result; //或者能夠連寫的形式 $result = $this->db ->select('*') ->from(self::TABLE.'cc') ->join('ci_user cu','cc.user_id = cu.user_id','left') ->where(array('cc.video_id'=>$video_id)) ->get() ->result_array(); }
wheresession
where('原生寫法') where(數組) get_where('表名',數組或原生) where_in('字段',要in的數組) 經過屢次使用$this->db->where()能夠組合使用多個where條件 //$this->db->where() 方法有一個可選的第三個參數,若是設置爲 FALSE,CodeIgniter 將不保護你的表名和字段名。 要執行or的時候,就會常常用到原生寫法,由於直接的查詢構造器不少都沒法實現 好比 想要這種語句:title like '%xxx%' or author like '%xxx%',用以下寫法 $where = "(title like '%$book_title_or_author%' or author like '%$book_title_or_author%' ) "; $this->db->where($where); //而後下面再寫其餘條件 $where=array('status'=>1); $this->db->where($where); $this->db->get();
likeapp
$this->db->like('title', '演員的自我修養'); //至關於WHERE `title` LIKE '%演員的自我修養%' ESCAPE '!' $this->db->like('title', '演員的自我修養', 'both'); // 先後都有百分號,默認不寫第三個參數就是both $this->db->like('title', '演員的自我修養', 'before'); // 百分號在前面 $this->db->like('title', '演員的自我修養', 'after'); // 百分號在後面
order byide
//傳遞兩個參數的寫法 $this->db->order_by('title', 'DESC'); $this->db->order_by('name', 'ASC'); //或者直接使用原生 $this->db->order_by('title DESC, name ASC');
order by還能夠隨機排序(這樣就不用在程序中使用suffle()函數對數組進行隨機排序了)
$this->db->order_by('title', 'RANDOM'); //第一個參數會被忽略,可是你能夠傳入一個 數字值,做爲隨機數的 seed。好比下面這種寫法 $this->db->order_by(42, 'RANDOM'); //至關於原生的order by rand(42)
可是這種方法對於大數據量的話效率很低,通常數據量超過1萬就不建議這麼使用,能夠參考下面這兩篇文章優化隨機取數據
https://blog.csdn.net/fdipzone/article/details/51541729
http://www.piaoyi.org/php/MySQL-Order-By-Rand.html
limit
$this->db->limit(10); //從第1條開始,查詢10行。至關於原生的limit 10 $this->db->limit(10, 20); //從第20條記錄開始,查詢10行。至關於原生的limit 20,10
查詢結果的展現形式
返回二維數組:result_array(); 用法舉例:
$this->db->get(self::TABLE)->result_array();
返回第一條記錄(一維數組):
$this->db->get(self::TABLE)->row_array();
返回一個單一的值(好比經過一個id查詢username):
CodeIgniter自帶的函數中沒有太好的方法,只能本身根據實際狀況對查詢結果進行修改,好比:
$result = $this->db->select('username')->where(array('id'=>$id))->get(self::TABLE)->row_array(); if(!empty($result)){ return $result['username']; }else{ return ''; }
返回行數count(通常用於分頁等):使用count_all_results()
$result = $this->db->where("age > 1 and age < 15")->count_all_results(self::TABLE,FALSE); //第二個參數是FALSE,沒理解官網說的重置select中設置的值是什麼意思 //下面這種寫法不能夠,用了count_all_results就不能用get()了,表名要寫在count_all_results()中 // $result = $this->db->where("age > 1 and age < 15")->get(self::TABLE)->count_all_results(); //固然也能夠本身構造,不使用官方的方法@城市之霧 $result = $this->db->select('count(1) countAs')->where("age > 1 and age < 15")->get(self::TABLE)->row_array(); return $result['countAs'];
public function setExample(array $data){ if(empty($data)){ return 0; } $data['status'] = 1; $data['add_time'] = time(); $data['edit_time'] = time(); $this->db->insert('a_table', $data); return $this->db->insert_id(); //返回自增id } //-----------------或者使用set()方法進行設置 public function setExample(array $data){ if(empty($data)){ return 0; } $data['status'] = 1; $data['add_time'] = time(); $data['edit_time'] = time(); $this->db->set($array); //直接set一個數組。固然也能夠一個值一個值的set,好比$this->db->set('name', $name); $this->db->insert('a_table'); return $this->db->insert_id(); //返回自增id }
public function setExample(array $data){ /* data樣例: $data = array( 'title' => $title, 'name' => $name, 'date' => $date ); */ if(empty($data)){ return 0; } $data['edit_time'] = time(); $this->db->where('id', $id); $result = $this->db->update('mytable', $data); return $result; } //-----------------或者使用set()方法進行設置 public function setExample(array $data){ /* data樣例: $data = array( 'title' => $title, 'name' => $name, 'date' => $date ); */ if(empty($data)){ return 0; } $this->db->set('edit_time', time()); //設置逐個設置值 $this->db->set($data); //設置數組 $this->db->where('id', $id); $result = $this->db->update('mytable'); return $result; } //特別說明,若是要set的不是字符串,而是須要進行運算的,則set的第三個參數設置爲FALSE便可,數據將不會自動轉義。下面比較一下: $this->db->set('field', 'field+1', FALSE); $this->db->where('id', 2); $this->db->update('mytable'); // 至關於原生的: UPDATE mytable SET field = field+1 WHERE id = 2 $this->db->set('field', 'field+1'); $this->db->where('id', 2); $this->db->update('mytable'); // 至關於原生的: UPDATE `mytable` SET `field` = 'field+1' WHERE `id` = 2
$this->db->where('id', $id); $this->db->delete('mytable'); //不過這種刪除方法不經常使用,如今流行的都是假刪除,就是更新記錄的狀態,status = 0之類的
查詢最後執行的sql語句:
echo $this->db->last_query();
加載數據庫類和session類
在application/config/autoload.php中
$autoload['libraries'] = array('database','session');
或者在基控制器中加載$this->load->database();
-----------------------------------------------------------------------------------------------------------------------------------------------
忘記引入model時報錯
Call to a member function getTeam() on null
在構造函數中引入便可:$this->load->model('xxx_model');
URL引入錯誤
config中的base_url要寫完整訪問地址,不能光寫域名。正確寫法:
$config['base_url'] = 'http://www.xxxx.com';