## CURD

* 开启 DEBUG 模式后,所有SQL语句均会在调试窗口显示,一目了然.

[TOC]

### find 单条查询

通过 find 操作进行简单的单条查询操作。

~~~

//查找主键值为 18 的记录

$db->find(18);

~~~

### all 查询(别名 select)

通过 all 查找所有记录数 。

~~~

//查找表中所有记录

$list = M('news')->all();

~~~

### table 临时改变表

通过 table() 方法可快速切换操作表

~~~

//改变操作表为 user

M('news')->table('user')->all();

~~~

### join 表关联

使用 join() 可以快速实现表间关联

~~~

//关联 user 表与 role 表

$data =M('user')->alias('u')->field('u.*')->join('__role__ r ON u.rid=r.rid')->all();

//生成的查询语句: select u.* from tb_user inner join tb_role r ON u.rid = r.rid;

~~~

### max 查找最大的值

查找年龄最大的用户

M('user')->max('age');

### min 查找最小的值

~~~

//查找最便宜的商品

M('goods')->min('price');

~~~

### avg 求平均值

~~~

//查找商品平均价格

M('user')->avg('price');

~~~

### sum 求和

~~~

//获得点击数之和

M('news')->sum('click')

~~~

### count 统计操作

~~~

//统计会员总数

M('user')->count()

~~~

### field 字段集

~~~

//返回字段为 uid 与 username

$db->field('uid,username')->select();

//以数组形式传参

$db->field(array('uid','username'))->select();

//更灵活的传参

$db->field(array('uid','concat(username,"-",uid)'=>'userid','LEFT(username,7)'=>'name'))- >select();

//上面生成SQL: SELECT uid,concat(username,"-",uid) AS userid,LEFT(username,7) AS name FROM tb_user

~~~

### 字段排除

~~~

//获得除 content,title 以外的所有字段

M('news')->field(array('title','content'),true)->all();

~~~

### limit 取部分数据

limit 方法就是为了生成 SQL 的 limit 部分

~~~

//查找第 2 条记录开始的 5 条记录

$db->limit('2,5')->all();

~~~

### order 排序

按 id 从大到小排序

$db->order('id desc')->all();

### getField 获得指定字段值

按字段名获得结果的方法

~~~

//获取唯一字段值值

//无论结果有多少个只返回一个值

$db->where('id=32')->getField('title');

~~~

~~~

//满足条件记录的所有 title 字段

$db->where('id>2')->getField('title',true);

~~~

~~~

//两个字段列表

//两个字段时返回一维数组,第一个字段做为键名使用,第 2 个字段做为键值

$db->getField('id,title');

~~~

~~~

//多个字段时

//多个字段返回二维数组,第一个字段值做为键名使用,其余字段做为键值

$db->getField('id,title,click');

~~~

### group 分组操作

TookPHP框架提供了完善的分组操作方法,自由指定分组参数使发送 SQL 更容易

~~~

//按 id 与 name 分组查询

$list =$db->group('id,name')->all();

//生成SQL: SELECT `id`,`name`,`sendtime` FROM tb_demo GROUP BY id,name

~~~

### having 分组条件

在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用 , 所以

使用 HAVING 对分组进行条件筛选 , 所以在使用 HAVING 时应该使用 group 分组。

~~~

//获得记录条数大于 2 的 cid 值

M('news')->having('count(*) >2')->group('cid')->select();

~~~

### add 添加数据(别名 insert)

特点 :

自动过滤非法字段

自动对插入数据进行安全处理

没有传入参数时使用 $_POST 值

返回值为新增主键值或 true

~~~

//实例

$data=array('uname'=>'admin','url'=>'http://www.baidu.com');

$lastId = $db->add($data);

~~~

### ORM 属性映射

~~~

$db->username = '李四';

$db->web = 'baidu.com';

$db->add();

~~~

### replace 添加数据

~~~

//数据中存在主键则更新否则添加数据。

$data =array('id'=>1,'name'=>'admin');

M('news')->replace($data);

~~~

### save 更新(别名 update)

**特点**

a. 自动过滤掉非法字段

b. 自动进行数据安全处理

c. 默认以 $_POST 数据更新

d. 必须有更新条件 , 防止误更新

e. 如果参数中存在主键值将以这个值为条件进行更新数据

~~~

//uid 为表主键,使用数据中的主键为条件进行更新

$data=array('uid'=>9,'username'=>' 郭富城 ');

$db->save($data);

~~~

### setField 更新字段

如果只是更新个别字段的值,可以使用setField方法。

~~~

//更改用户的name值

M("user")->where('id=5')->setField('name','TookPHP');

//生成SQL: update tb_user set name='TookPHP' where id=5

~~~

setField方法支持同时更新多个字段,只需要传入数组即可,例如:

~~~

//更改用户的name和email的值

$data = array('name'=>'TookPHP','email'=>'test@163.com');

M("user")->where('id=5')->setField($data);

~~~

### inc 增加值

注:

* 带三个参数:inc($field, $where, $step)

* 带两个参数:inc($field, $step)

* 只带一个参数:inc($field)

* $step 缺省值 1

~~~

//将 id 为 4 记录的 total 加 1 ()

M('news')->inc('total','id=4',1);

//生成SQL: update tb_news set total=total+1 where id=4

//将 id 为 4 记录的 total 加 1

M('news')->where('id=4')->inc('total');

//生成SQL: update tb_news set total=total+1 where id=4

//将 id 为 4 记录的 total 加 100

M('news')->where('id=4')->inc('total',100);

//生成SQL: update tb_news set total=total+100 where id=4

~~~

### dec 减少值

用法同上 inc方法,唯一区别在于 inc用于增加值,dec用于减少值

~~~

//将 id 为 4 记录的 total 减 1

M('news')->dec('total','id=4',1);

//生成SQL: update tb_news set total=total-1 where id=4

//将 id 为 4 记录的 total 减 100

M('news')->where('id=4')->dec('total',100);

//生成SQL: update tb_news set total=total-100 where id=4

~~~

### del 删除(别名 delete)

为了屏蔽误删除 del 方法必须指定条件

~~~

//删除主键值为 58 的数据

M('news')->del(58);

//生成SQL: DELETE FROM tb_news WHERE id in(58)

~~~

### fieldExists 检测表字段是否存在

~~~

//检测 news 表是否存在 title 字段

$db->fieldExists('title','news');

~~~

### tableExists 检测表是否存在

`M()->tableExists('category');`

### getVersion 获得数据库版本信息

`$db->getVersion();`

### getLastSql 获得最后一条 SQL

$db->getLastSql();

### getAllSql 获得所有 SQL 语句

`$db->getAllSql();`

### getAffectedRows 获得受影响的行数

`$db->getAffectedRows();`

### getInsertId 获得最后插入的主键值

~~~

$data=array('title'=>'标题');

$db->insert($data);

$db->getInsertId();

~~~

### getAllTableInfo 获所有表信息

获得当前数据库的所有表信息 , 数据大小包括碎片、数据、索引

`M()->getAllTableInfo();`

### getDataBaseSize 获得数据库大小

获得当前数据库大小即所有表碎片、数据、索引之和

`M()->getDataBaseSize();`

### getTableSize 获取表大小

~~~

//获得 news 表大小 , 包含表碎片、数据、索引之和

M()->getTableSize('news');

~~~

### createDatabase 创建数据库

~~~

//以 gbk 编码创建数据库 testdb

M()->createDatabase('testdb','gbk');

~~~

### truncate 清空表

~~~

//清空表 news 表并将自增数归零

M()->truncate(news);

~~~

### repair 修复表

`M()->repair('user');`

### optimize 优化表

`M()->optimize('user');`

### rename 修改表名

~~~

//将 user 表更名为 tk_user 表

M()->rename('user','tk_user');

~~~

### dropTable 删除表

`$db->dropTable('user');`

### beginTrans 开启事务

~~~

//完成事务处理需要选择表引擎如 InnoDB、NDB、BDB

$data=array('wages'=>100);

$db->beginTrans();// 开启事务

$db->add($data);// 添加数据

$db->commit(); // 提交事务

~~~

### rollback 事务回滚

~~~

//当事务完整性被破坏或者其他原因可以通过 rollback 方法放弃本次事务操作

$db->rollback();

~~~

### 提交事务 commit()

~~~

//如果整个事务完成正确可以通过 commit() 进行事务的提交完成最终操作

$data=array('wages'=>100);

$db->beginTrans();// 开启事务

$db->add($data);// 添加数据

$db->commit();// 提交本次事务

~~~

PHP封装curd,CURD · TookPHP开发手册 · 看云相关推荐

  1. php什么是耦合关系,耦合与解耦 · iThinkphp完全开发手册 · 看云

    在项目的开发过程中,我们经常强调代码模块尽量做到 **高内聚低耦合**,那么到底是什么是耦合?怎样做到低耦合? 很多同学感到疑惑,下面我深入探讨这个问题,如何在程序设计中进行解耦合实现低耦合. > ...

  2. php 分布式数据库查询,分布式数据库 · Thinkphp5.0完全开发手册 · 看云

    # 分布式数据库 ThinkPHP内置了分布式数据库的支持,包括主从式数据库的读写分离,但是分布式数据库必须是相同的数据库类型. 配置`database.deploy` 为1 可以采用分布式数据库支持 ...

  3. php标签扩展,标签扩展 · ThinkPHP5.0完全开发手册 · 看云

    ## 标签库加载 模板中加载标签库,预加载自定义标签库,扩展内置标签库的加载 请参考:模板/标签库 >[info]建议开发者将自定义标签库请放置应用目录中,请勿放在框架系统目录内,以免使用`Co ...

  4. php sae,SAE · ThinkPHP3.2.3完全开发手册 · 看云

    ## SAE介绍 Sina App Engine(简称**SAE**)是新浪研发中心开发的国内首个公有云计算平台,是新浪云计算战略的核心组成部分,作为一个简单高效的分布式Web服务开发.运行平台越来越 ...

  5. 多语言php,多语言 · ThinkPHP5.0完全开发手册 · 看云

    ThinkPHP内置通过`\think\Lang`类提供多语言支持,如果你的应用涉及到国际化的支持,那么可以定义相关的语言包文件.任何字符串形式的输出,都可以定义语言常量. ## 开启和加载语言包 默 ...

  6. php tp3 操作绑定到类,操作绑定到类 · ThinkPHP3.2.3完全开发手册 · 看云

    ## 定义 ThinkPHP3.2版本提供了把每个操作方法定位到一个类的功能,可以让你的开发工作更细化,可以设置参数**ACTION_BIND_CLASS**,例如: ~~~ 'ACTION_BIND ...

  7. 数据缓存 php,数据缓存 · ThinkPHP3.2.3完全开发手册 · 看云

    在ThinkPHP中进行缓存操作,一般情况下并不需要直接操作缓存类,因为系统内置对缓存操作进行了封装,直接采用S方法即可,例如: ## 缓存初始化 ~~~ // 缓存初始化 S(array('type ...

  8. php控制器的作用,控制器定义 · ThinkPHP5.0完全开发手册 · 看云

    ThinkPHP V5.0的控制器定义比较灵活,可以无需继承任何的基础类,也可以继承官方封装的`\think\Controller`类或者其他的控制器类. ## 控制器定义 一个典型的控制器类定义如下 ...

  9. php 助手函数,助手函数 · ThinkPHP5.1完全开发手册 · 看云

    >[info] 在5.1版本中,大部分的助手函数都可以归结为一个函数`app()`,因为5.1全面采用容器管理类的实例,而`app()`函数又是容器的"管家". ## 助手函 ...

最新文章

  1. 探子报!双十一紧急军情!!!
  2. 识别不了socket未知的名称或服务
  3. 独家发布 | 产品经理生存现状
  4. ADO.NET提供的Connection类总结
  5. Linux下使用wc命令快速统计所有文件的行数
  6. 普通程序员,如何转型大数据相关方向?
  7. python中get和getall_Scrapy框架get() 、getall() 、extract() 、extract_first()的区别
  8. centos6.5 安装svn可视化管理工具 if.svnadmin
  9. 下载faceScrub人脸数据库(单线程版本)
  10. 正则 负数 python_如何系统的自学 Python?“从新手到大师”的百天之路(上)
  11. Spring Cloud Gateway初体验
  12. noise levels descript
  13. vue elementUI弹窗使用destroy-on-close后,关闭弹窗会重新发送请求
  14. 金三银四,是纵马一跃,还是稳如老狗!
  15. [Kafka][错误: 找不到或无法加载主类 Files\Java\jdk1.8.0_101\lib\dt.jar;C:\Program]
  16. scons 手册_SCons笔记(详细版)
  17. 单商户商城系统功能拆解39—分销应用—分销等级
  18. [ISCC 2021]部分wp
  19. Python——切片操作
  20. 计算机CAD技术在工程设计中的应用,研究在机械工程设计中CAD技术的运用

热门文章

  1. 关于Git使用的一些心得
  2. Spring装配Bean的过程
  3. 如何理解 Objective-C Delegate
  4. 阴雨连绵潮湿加剧 车辆防潮提升保值
  5. linux下ORACLE的Sqlplus命令
  6. 证监会:《证券期货业信息安全保障管理办法(征求意见稿) 》公开征求意见...
  7. JNDI(datasource)在tomcat,JBOSS下的spring+quartz配置
  8. VTP (vlan trunking protocol)
  9. IEC 6-1131/3的5种标准编程语言
  10. 学习笔记(48):Python实战编程-grid布局