CodeIgniter框架——访问方式 URI 分配变量 数据库操作
2014-08-21 22:14
417 查看
1、访问方式:
CodeIgniter 的访问URL使用的是pathinfo,入口文件/控制器/方法(/参数列表)
eg:localhost/index.php/welcome/index/id
2、URI参数获取:
控制器端代码
运行效果
3、分配变量
(1)把数据从控制器传到视图中
控制器端代码
视图端代码
运行效果
(2)数据分配流程范例:
控制器端helloworld.php代码
虽然你只传送一个变量到视图中,但是,你能把许多数据装进那个变量中。$data数组的每个值还可以是数组,这被称为多维数组,因此,用一个数组变量可以把大量的变量传递给视图,这是一个很好的编程技巧。
模型端helloworld_model.php代码
视图端helloworld_view.php代码
访问url:http://localhost/index.php/helloworld/index/name
运行效果
4、加载数据库:
此类操作放在MVC中的Model中,必须继承数据核心类CI_Model,同时重载父类的构造方法。
在每次使用数据库的时候,都需要加载一次数据库:
为了方便,可以将数据库的加载设置成自动加载,在\application\config\autoload.php中。
对于数据库访问对象,装载到超级对象的属性中 $this->db
AR操作数据库,在database.php文件中,将$active_recoed的值改为TRUE,这样就可以使用AR了。
总结为:
CodeIgniter 的访问URL使用的是pathinfo,入口文件/控制器/方法(/参数列表)
eg:localhost/index.php/welcome/index/id
第一段表示调用控制器类。 第二段表示调用类中的函数或方法。 第三及更多的段表示的是传递给控制器的参数,如 ID 或其它各种变量。
2、URI参数获取:
控制器端代码
public function getUri($id,$name,$year) { echo "id--->".$id."---name--->".$name."---year--->".$year."<br />"; //依次得到uri参数 echo "segment(1)--->".$this->uri->segment(1)."<br />"; echo "segment(2)--->".$this->uri->segment(2)."<br />"; echo "segment(3)--->".$this->uri->segment(3)."<br />"; echo "segment(4)--->".$this->uri->segment(4)."<br />"; echo "segment(5)--->".$this->uri->segment(5)."<br />"; }
运行效果
3、分配变量
(1)把数据从控制器传到视图中
控制器端代码
public function addView() { $this->load->vars("title","value"); $list = array( array('id'=>1,'name'=>'mw','email'=>'123@123.com'), array('id'=>2,'name'=>'mw2','email'=>'1233@123.com'), array('id'=>3,'name'=>'mw3','email'=>'12333@123.com') ); $data['new_title']="test_title"; $data['list']=$list; $this->load->vars($data); $this->load->view("view_test"); }
$this->load->vars('$array'); 说明:这个函数以一个关联数组作为输入参数,将这个数组用PHP的extract函数,转化成与这个数组对应的变量 。你之所以要单独用这个函数也许是因为,你想在控制器的构造函数中设置一些全局变量,以使这些变量在任意函数调用的视图(view)里能够用上。你能多次调用这个函数。数组数据被缓存并被并入一个数组,用来转化成变量。
视图端代码
<html> <head> </head> <body> <h1><?php echo $title;?></h1> title is <?php echo $title;?> <h1><?php echo $new_title;?></h1> new_title is <?php echo $new_title;?> <h1>test_ci:the data from controller to view</h1> <table> <?php foreach($list as $item):?> <tr> <td><?=$item['id']?></td> <td><?=$item['name']?></td> <td><?=$item['email']?></td> </tr> <?php endforeach;?> </table> </body> </html>
运行效果
(2)数据分配流程范例:
控制器端helloworld.php代码
<?php class HelloWorld extends CI_Controller{ function index($name){ //获取url中的参数$name echo $name,", Hello world ~ in controller and the name is parameter"; echo '</br>'; $this->load->model('helloworld_model'); //载入模型 $data=array(); $data['helloworld_view'] = $this->helloworld_model->get_helloworld_view(); //利用模型中的方法返回其中的数据 $this->load->view('helloworld_view',$data); //载入视图,并传入参数$data } }
在控制器有设置名为$data的数组,并把一些对象的属性及文本读入数组;然后通过名称装载视图,并把$data作为第二个参数。 注:在幕后,CI很好地利用了另外一个PHP函数:extract(),这个函数的作用是把数组中的元素取出放入变量表,其中每个键值对中的键名即为变量名,对应该键名的值为变量的值。因此我们刚才定义的$data数组在视图中转换成一个单一的变量。
虽然你只传送一个变量到视图中,但是,你能把许多数据装进那个变量中。$data数组的每个值还可以是数组,这被称为多维数组,因此,用一个数组变量可以把大量的变量传递给视图,这是一个很好的编程技巧。
模型端helloworld_model.php代码
<?php class Helloworld_model extends CI_Model{ public function get_helloworld_view() { $helloworld_view = "Model for Helloworld!"; return $helloworld_view; //返回数据$helloworld_view } }
视图端helloworld_view.php代码
<html> <head> <title> Helloworld </title> <meta name="Author" content=""> <meta name="Keywords" content=""> <meta name="Description" content=""> </head> <body> View for Helloworld ~ in the view //视图本身显示信息 <h1> <?php echo $helloworld_view;?> //显示从模型中得到的数据 </h1> the workflow is : controller get the data from model, and send view display. </body> </html>
访问url:http://localhost/index.php/helloworld/index/name
运行效果
4、加载数据库:
此类操作放在MVC中的Model中,必须继承数据核心类CI_Model,同时重载父类的构造方法。
class Model_name extends CI_Model { function __construct() { parent::__construct(); } }
在每次使用数据库的时候,都需要加载一次数据库:
$this->load->database();
为了方便,可以将数据库的加载设置成自动加载,在\application\config\autoload.php中。
$autoload['libraries'] = array('database');
对于数据库访问对象,装载到超级对象的属性中 $this->db
$res = $this->db->query($sql);//返回对象 $res->result();//返回数组,数组中是一个一个的对象 $res->result_array();//返回二维数组,里面是关联数组 $res->row();//返回第一条数据,直接是一个对象
AR操作数据库,在database.php文件中,将$active_recoed的值改为TRUE,这样就可以使用AR了。
//查询 public function index() { $res = $this->db->get('表名');//这里自动调用前缀 foreach($res->result() as $item) { echo $item->name."<br />"; } }
//插入 public function index() { $data=array( 'name'=>'lisi', 'password'=>md5('lisi') ); $bool = $this->db->insert("表名",$data); var_dump($bool); }
//更新 public function index() { $data=array( 'name'=>'wangwu', 'password'=>md5('wangwu') ); $bool = $this->db->update('表名',$data,array('id'=>3)); var_dump($bool); }
//删除 $bool = $this->db->delete('表名',array('id'=>2)); var_dump($bool);
总结为:
(1)连接数据库:$this->load->database(); 注:将其写在模型的构造函数里,这样就在加载模型的同时连接了数据库 (2)插入数据: $this->database->insert($t_name,$data); $t_name:需操作的表 $data:需插入的数据(键名=字段名,键值=字段值,自增主键可不写) (3)更新数据: $this->db->where(字段名,字段值); $this->db->update(表名,修改值的数组); (4)查询数据: $this->db->where(字段名,字段值); $this->db->select(字段); $query=$this->db->get(表名); return $query->result(); (5)删除数据: $this->db->where(字段名,字段值); $this->db->delete(表名);
相关文章推荐
- yii框架操作数据库的一种方式
- CodeIgniter框架数据库基本操作示例
- Java操作数据库的三种方式(原生jdbc,JdbcTemplate,数据层框架)
- Yii框架操作数据库的几种方式与mysql_escape_string
- Yii框架操作数据库的几种方式与mysql_escape_string
- ThinkPHP框架基于PDO方式连接数据库操作示例
- C#以操作数据库方式访问EXCEL文件的几个常见问题及解决方法
- JAVA中数据库操作的各种方式与设计模式的应用(转载)希望能对网友们有用
- 因为数据库正在使用,所以未能获得对数据库的排它访问权。RESTORE DATABASE 操作异常终止。
- 建立JSP操作以提高数据库访问的效率
- JAVA中数据库操作的各种方式与设计模式的应用
- ARX二次开发中使用DAO方式访问数据库,导致AutoCAD2004及以上版本退出时报错的解决方法
- JAVA中数据库操作的各种方式与设计模式的应用
- JAVA操作数据库方式与设计模式应用
- 创新谈-开发基础框架进行应用与数据库访问的封装-王作敬
- JAVA中操作数据库方式与设计模式的应用
- 通过操作地址的方法来访问C++类对象中私有成员变量
- 改进ADO.Net数据库访问方式
- VC下ADO的数据库访问方式举例
- java中访问数据库操作