CodeIgniter框架——访问方式 URI 分配变量 数据库操作
1、访问方式:
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(表名);
CodeIgniter框架——访问方式 URI 分配变量 数据库操作的更多相关文章
- 循序渐进Python3(十二) --2-- web框架之django简单实现oracle数据库操作
在 Django 中构建 Oracle 数据库支持的 Web 应用程序 了解如何配置 Django 以便与 Oracle 数据库交互,并使用 ORM 进行数据库连接. 产能在软 ...
- Python框架学习之Flask中的数据库操作
数据库操作在web开发中扮演着一个很重要的角色,网站中很多重要的信息都需要保存到数据库中.如用户名.密码等等其他信息.Django框架是一个基于MVT思想的框架,也就是说他本身就已经封装了Model类 ...
- C#---数据库访问通用类、Access数据库操作类、mysql类 .[转]
原文链接 //C# 数据库访问通用类 (ADO.NET)using System;using System.Collections.Generic;using System.Text;using Sy ...
- C#---数据库访问通用类、Access数据库操作类、mysql类 .
//C# 数据库访问通用类 (ADO.NET)using System;using System.Collections.Generic;using System.Text;using System. ...
- Spring框架学习10——JDBC Template 实现数据库操作
为了简化持久化操作,Spring在JDBC API之上提供了JDBC Template组件. 1.添加依赖 添加Spring核心依赖,MySQL驱动 <!--Spring核心基础依赖--> ...
- tornado 数据库操作
tornado是python的web框架,web程序开发中数据库操作是必须的. 安装: tornado的官方文档中提供的说明比较少,而且提供的模块中未找到数据库方面的模块,难道没有针对数据库操作进行封 ...
- 新手学python(2):C语言调用完成数据库操作
继续介绍本人的python学习过程.本节介绍如何利用python调用c代码.内容还是基于音乐信息提取的过程,架构如图一.Python调用c实现的功能是利用python访问c语言完成mysql数据库操作 ...
- C# 中的数据库操作~存储过程篇Mysql SqlServer
Mysql 存储过程查询方式 SQL server 普通数据库操作 EF 调用SQL SERVER存储过程 Mysql 存储过程查询方式: public NetPort GetNetdevicePor ...
- smarty中三种变量的访问方式
在模板中smarty有三种变量,第一种,php分配的变量,第二种配置文件里的变量,第三种,PHP全局数组里的变量,配置文件里变量的访问方式可以是{#bgcolor#},"#"必须紧 ...
随机推荐
- Java ArrayList的模拟实现
package test; import java.util.Arrays; import java.util.Collection; public class MyArrayList<E> ...
- Eclipse+Maven远程部署项目到Tomcat中
使用maven的自动部署功能可以很方便的将maven工程自动打包并且部署到远程tomcat服务器,省去一些繁琐的操作,节省大量时间. 我使用的tomcat版本是8.5,tomcat7和tomcat8都 ...
- pickle和cPickle:Python对象的序列化(上)
https://segmentfault.com/a/1190000002493548 pickle模块实现了一种算法,将任意一个Python对象转化成一系列字节(byets).此过程也调用了seri ...
- Retrofit全攻略——基础篇
实际开发过程中一般都会选择一些网络框架提升开发效率.随着Google对HttpClient 摒弃和Volley框架的逐渐没落.OkHttp開始异军突起.而Retrofit则对OkHttp进行了强制依赖 ...
- 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何让不同的PLC程序分线程运行 TC3
右击Tasks,添加一个新的Task 可以为这个线程设置自定义的扫描周期 然后在项目上右击添加Referenced Task 在TaskSub1上右击添加现有项,把之气写好的PRG程序绑定 ...
- spring--百度百科
Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development a ...
- Java 连接使用 Redis
1. 开始在 Java 中使用 Redis 前, 我们需要确保已经安装了 redis 服务及 Java redis 驱动,且你的机器上能正常使用 Java. 首先你需要下载驱动包,下载 jedis.j ...
- Android Studio+SVN配置生成apk文件
Android Studio 是谷歌推出一个Android集成开发工具,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发 ...
- Android 关于ZXing的使用
1.http://blog.csdn.net/ryantang03/article/details/7831826 2.http://blog.csdn.net/xiaanming/article/d ...
- EF中多表公共字段,以及设置EntityBase使所有实体类继承自定义类
使用EF框架访问数据库时,如果某些表具有公共字段,例如在审核流程中,对于各类申请单资料的创建人.创建时间.修改人.修改时间,这些可能多表都需要的字段,如果在每个实体中进行赋值操作显然是类似和重复的,下 ...