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';