PHP封装curd,CURD · TookPHP开发手册 · 看云

## 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();// 提交本次事务

~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值