一、数据读取

在之前的课程中,我们已经大量使用了数据读取的功能,比如 select()方法。结合各
种连贯方法可以实现数据读取的不同要求,支持连贯的方法有:

1.where,查询或更新条件;
2.table,要操作的数据表名称;
3.alias,数据表别名;
4.field,查询字段;

5.order,结果排序;
6.group,查询分组;
7.having,分组再查询;
8.join,多表链接查询;
9.union,合并 SELECT;
10.distinct,取唯一值;

11.lock,锁;
12.cache,缓存;
13.relation,关联查询;
14.result,数据转换;
15.scope,命名范围;
16.bind,数据绑定操作;
17.comment,SQL 注释。

显示默认第一条数据

 1 $user = M('User');
2 var_dump($user->find()); //可以传递数字参数,AR 模式

这时find()里面加哪一个数字,就会var_dump()出哪一条数据;(其实是找主键等于某个数值,如果主键不是数值或者

主键中该数值不存在的话,则没有数据)

显示默认所有数据

 $user = M('User');
var_dump($user->select());

此时,select()括号内加上数字,也是只获取id为该数字的数据

获取第一条user字段的值

 $user = M('User');
var_dump($user->getField('user'));

获取所有user字段的值

 $user = M('User');
var_dump($user->getField('user', true));

传递多个字段,获取所有

 $user = M('User');
var_dump($user->getField('user,email'));

id冒号分隔

 $user = M('User');
var_dump($user->getField('id,user,email',':'));

获得结果如图:

id与后面的数据之间隔了:符号;

限制2条数据

 $user = M('User');
var_dump($user->getField('id,user,email',2));

二、数据更新

数据更新使用的方法是 save()方法,主要是对数据的修改操作。

修改第一条数据

 $user = M('User');
$data['user'] = '蜡笔大新';
$data['email'] = 'daxin@qq.com';
$map['id'] = 1;
$user->where($map)->save($data); //成功后返回 1,否则 0

如果数据成功存入数据库,这时用 echo $user->where($map)->save($data); 则会返回1,否则返回0;

默认主键为条件

 $user = M('User');
$data['id'] = 1;
$data['user'] = '蜡笔小新';
$data['email'] = 'xiaoxin@163.com';
$user->save($data);

这时,会自动识别数据库的主键,主键设置的为id,则,这时更新主键为1的内容;

数据更新的 save()方法支持的连贯方法有:

1.where,查询或更新条件;
2.table,要操作的数据表名称;
3.alias,数据表别名;
4.field,查询字段;
5.order,结果排序;

6.lock,锁;
7.relation,关联查询;
8.scope,命名范围;
9.bind,数据绑定操作;
10.comment,SQL 注释。

结合create()

这时,在首先在主目录下index.html(与index.php同级),插入以下代码

 <meta charset="utf-8">
<form method="post" action="http://localhost/demo39/index.php/Home/User/save">
<p><input type='hidden' name='id' value='1' /></p>
<p>用户:<input type="text" name="user" /></p>
<p>邮箱:<input type="text" name="email" /></p>
<input type="submit" value="提交">
</form>

在  Home/controller/UserController.class.php  下插入以下代码:

 $user = M('User');
$user->create();
$user->save();

解释一下在index.html内插入 <p><input type='hidden' name='id' value='1' /></p>  的意思

因为 Home/controller/UserController.class.php  使用的是 $user->create();  ,也就是所有

index.html里POST上来的内容的都在create()里,如果这里没有主键的话,那么数据就无法更新数据库了。

修改某一个值

 $map['id']=1;
$data['user']=$_POST['user'];
$user->where($map)->setField('user',$data['user']);

这时,是将POST过来的一条数据插入数据库,其实也可以把id放在html中,这样,post上来的数据就可以直接存储了

统计累计,累加累减

 $user = M('User');
$map['id'] = 1;
$user->where($map)->setInc('count',1); //累加,setDec 累减

这时我们在数据库新建一个名字叫count,如下图:

这时我们使用setInc函数后,count可以每次自动加一,count后面的数字是可以随便改的,(想到,这样其实可以在应用中设定,

当用户每次登录时,或者改变数据时,使conut加上某个数值的。就相当于是积分了)

三、数据删除

数据删除使用的方法是 delete()方法

直接删除主键(id=17)

 $user = M('User');
$user->delete(17);

根据ID来删除

 $user = M('User');
$map['id'] = 16;
$user->where($map)->delete();

批量删除多个

 $user = M('User');
$user->delete('1,3,5');

删除count为0且按时间倒序的前五个

 $user = M('User');
$map['count'] = 0;
$user->where($map)->order(array('date'=>'DESC'))->limit(5)->delete();

删除所有数据,谨慎

 $user = M('User');
$user->where('1')->delete();

这时如果  echo $user->where('1')->delete(); 则echo出的是删除数据的条数;where()括号里面只要是个数值就可以,不一定就是1;

delete()方法支持的连贯操作有:

1.where,查询或更新条件;
2.table,要操作的数据表名称;
3.alias,数据表别名;
4.order,结果排序;
5.lock,锁;

6.relation,关联查询;
7.scope,命名范围;
8.bind,数据绑定操作;
9.comment,SQL 注释。


四、ActiveReocrd 模式

这种模式最大的特别就是简化了 CURD 的操作,并且采用对象化的操作方式,便于使用
和理解。

添加一条数据

 $user = M('User');
$user->user = '火影忍者';
$user->email = 'huoyin@qq.com';
$user->date = date('Y-m-d H:i:s');
$user->add();

结合create

 $user = M('User');
$user->create();
$user->date = date('Y-m-d H:i:s');
$user->add();

找到主键为4的值

 $user = M('User');
var_dump($user->find(4));

查找user=蜡笔小新的记录

 $user = M('User');
var_dump($user->getByUser('蜡笔小新'));

输出user

 echo $user->user;

通过主键查询多个

 $user = M('User');
var_dump($user->select('1,2,3'));

修改一条数据

 $user = M('User');
$user->find(1);
$user->user = '蜡笔老新';
$user->save();

修改一条数据

 $user = M('User');
$user->find(1);
$user->user = '蜡笔老新';
$user->save();

删除当前找到的数据

 $user = M('User');
$user->find(11);
$user->delete();

删除主键为10的数据

 $user = M('User');
$user->delete(10);

删除主键为10,11的数据

 $user = M('User');
$user->delete('10,11');

注意delete()括号里的数字一定要加上单引号,如果不加单引号,则删除的时候只会删除前一个数字,而不是两个都删

五、字段映射

字段映射可以将表单里的 name 名称对应到数据表里的字段,这样防止系统自动屏蔽掉
不对应的 POST 值。

在index.html内的代码如下:

 <meta charset="utf-8">
<form method="post" action="http://localhost/demo39/index.php/Home/User/save">
<p>用户:<input type="text" name="yonghu" /></p>
<p>邮箱:<input type="text" name="youxiang" /></p>
<input type="submit" value="提交">
</form>

注意三个地方,一是action提交的地方是 User/save ,而是用户和邮箱的name不是user和email了

这时,在 Home/Model/UserModel.class.php 内的代码如下:

 <?php
namespace Home\Model;
use Think\Model; class UserModel extends Model {
protected $_map = array(
'yonghu'=>'user', //这里是逗号
'youxiang'=>'email',
); //这里要加分号
}

即把index.html中的name对应到数据表的名字,注意$_map后面的分号,这样在 Home/controller/UserController.class.php 便可直接使用以下代码:

 public function save() {
$user = D('User');
$data=$user->create();
$map['id']='1';
$user->where($map)->save($data);
}

这时,即可更新id为1 的内容

CURD 操作 [2]的更多相关文章

  1. MongoDB学习笔记~自己封装的Curd操作(按需更新的先决条件)

    回到目录 我们上一讲中介绍了大叔封装的Mongo仓储,其中介绍了几个不错的curd操作,而对于按需更新内部子对象,它是有条件的,即你的子对象不能为null,也就是说,我们在建立主对象时,应该为子对象赋 ...

  2. Laravel框架数据库CURD操作、连贯操作使用方法

    Laravel框架数据库CURD操作.连贯如何来操作了这个操作性是非常的方便简单了我们在这里来为各位介绍一篇相关的教程,具体的细节步骤如下文介绍.   Laravel是一套简洁.优雅的PHP Web开 ...

  3. php对xml文件进行CURD操作

    XML是一种数据存储.交换.表达的标准: - 存储:优势在于半结构化,可以自定义schema,相比关系型二维表,不用遵循第一范式(可以有嵌套关系): - 交换:可以通过schema实现异构数据集成: ...

  4. MongoDB的安装及CURD操作

    MongoDB的下载地址:http://www.mongodb.org/downloads MongoDB有32bit和64bit两个版本,32bit只能存放2GB数据.我们选择64bit版进行下载. ...

  5. LINQ-to-SQL那点事~利用反射在LINQ-to-SQL环境中实现Ado.net的CURD操作

    回到目录 对于linq to sql提供的CURD操作,给我们的感觉就是简单,容易使用,更加面向对象,不用拼SQL语句了,这些好处都表示在处理单条实体或者集合长度小的情况下,如果有一个1000条的集合 ...

  6. Laravel框架数据库CURD操作、连贯操作

    这篇文章主要介绍了Laravel框架数据库CURD操作.连贯操作.链式操作总结,本文包含大量数据库操作常用方法,需要的朋友可以参考下 一.Selects 检索表中的所有行 $users = DB::t ...

  7. 一个简单的ORM制作(CURD操作类)

    SQL执行类 CURD操作类 其他酱油类 此篇是为上篇文章填坑的,不知道上篇砸过来的砖头够不够,不够的话请大家继续砸. CURD操作类负责将用户提供的条件转换为SQL语句,并提供给IHelper执行, ...

  8. Laravel框架数据库CURD操作、连贯操作总结

    这篇文章主要介绍了Laravel框架数据库CURD操作.连贯操作.链式操作总结,本文包含大量数据库操作常用方法,需要的朋友可以参考下 一.Selects 检索表中的所有行 复制代码代码如下: $use ...

  9. dom4j解析XML的CURD操作

    在开发JavaWeb项目中通常是利用XML配置文件来提高应用程序的访问效率,而在配置XML的同时,更多时候是对XML进行解析. 一.解析XML配置文件有两种机制: DOM和SAX的机制: DOM是将整 ...

  10. 一行代码实现FMDB的CURD操作

    上次实现FMDB的CURD基本操作后,用在项目里,每个实体类都要写SQL语句来实现创建表和CURD操作,总觉得太麻烦,然后就想着利用反射和kvc来实现一个数据库操作的基类继承一下,子类只需要继承,然后 ...

随机推荐

  1. Python爬虫之利用BeautifulSoup爬取豆瓣小说(一)——设置代理IP

    自己写了一个爬虫爬取豆瓣小说,后来为了应对请求不到数据,增加了请求的头部信息headers,为了应对豆瓣服务器的反爬虫机制:防止请求频率过快而造成“403 forbidden”,乃至封禁本机ip的情况 ...

  2. TCP/IP详解学习笔记(1)-基本概念【转】

    转自:http://blog.csdn.net/goodboy1881/article/details/665041 为什么会有TCP/IP协议 在世界上各地,各种各样的电脑运行着各自不同的操作系统为 ...

  3. Hive group by实现-就是word 统计

    准备数据 SELECT uid, SUM(COUNT) FROM logs GROUP BY uid; hive> SELECT * FROM logs; a 苹果 5 a 橙子 3 a 苹果 ...

  4. SQLSERVER XML 类型列的模糊查询

    select <column_name> from MyTable where <column_name>.value('(/root/sub-tag)[1]', 'varch ...

  5. Codeforces Round #286 (Div. 2)A. Mr. Kitayuta's Gift(暴力,string的应用)

    由于字符串的长度很短,所以就暴力枚举每一个空每一个字母,出现行的就输出.这么简单的思路我居然没想到,临场想了很多,以为有什么技巧,越想越迷...是思维方式有问题,遇到问题先分析最简单粗暴的办法,然后一 ...

  6. js 去除字符串两边的空格

    js 去除字符串两边的空格 function trim(str){ //删除左右两端的空格          return str.replace(/(^\s*)|(\s*$)/g, "&q ...

  7. 将变参格式化到一个string对象中

    该小程序演示了变参的用法.它的功能是,仿照sprintf,将变参内容保存到string中. /* 功能说明: 仿照sprintf,将字符串格式化到一个string对象中. 实现方式: 该例子主要是用来 ...

  8. 电话圈(floyd)

    题意: 如果两个人相互打电话,则说他们在同一个电话圈里.例如,a打给b,b打给c,c打给d,d打给a,则这4个人在同一个圈里:如果e打给f但f不打给e,则不能推出e和f在同一个电话圈里,输出所有电话圈 ...

  9. 巧用padding让图片宽高比固定并自适应布局

    1.从上图知道原始图片大小是 800 * 250,即宽高比为 3.2: 2.html 及 css 代码如下, 可以知道就只是在一个div里面放了一张图片,那么如何让这张图片的宽高比固定呢,看了css之 ...

  10. C# 读xml注释或过滤xml注释

    有这么个需求: 要统计所有的配置文件,这些配置文件都xml格式,并把这些配置写到数据表里,如果有注释要把这些注释写到对应配置对象的描述字段上 <item id="" key= ...