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

~~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/267342.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MemCache 分布式缓存

引用:http://baike.baidu.com/view/1193094.htm Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说…

全排列问题(递归)

上次上课老师讲了全排列算法,现在刚刚看自己的写的全排列算法,看了好一会才看懂。。。。 应该是自己理解的不够彻底 所以今天彻彻底底的来分析一下 先看图: 思路: 先固定一个字符,然后将固定的字符与它后面的每一个进行…

asp mysql 连接字符串,在ASP中连接数据库(连接字符串)

一、存取数据库的原理在ASP中,用来存取数据库的对象统称ADO对象(Active Data Objects),主要含有三种对象:Connection、Recordset和Command,其中Connection负责打开或连接数据库,Recordset负责存取数据表,Co…

Windows 7/Vista 桌面上为何有两个隐含的 Desktop.INI

笔者今天在微软中文论坛看到有人又问起一个不算新问题的问题:当我们通过 Windows 7/Vista 的文件夹 选项设置允许显示隐含的文件后,会在 Windows 7/Vista 桌面上看到两个同名的 Desktop.INI 隐含文件; 而在 Windows XP 中允许显示隐含的文件却…

@Autowired @Resource @Inject 自动注入

一、AutoWired ( spring 的注解 )自动注入 /*** Autowired:* 默认按照 Student 类型去容器中找对应的组件:applicationContext.getBean(Student.class);* 如果找到多个相同类型的组件,再将 student 这个属性名作为 id 去容器中找对应组件 applicati…

峰Redis学习(8)Redis 持久化AOF方式

第三节:Redis 的持久化之AOF 方式       AOF方式:将以日志,记录每一个操作优势:安全性相对RDB方式高很多; 劣势:效率相对RDB方式低很多; 1)AOF方式需要配置: # Ple…

移动web开发框架之我见

目前开发移动程序框架选择很多,从Web App,到PhoneGap,Titanium,MonoTouch,再到Native App,总有一款适合你。规律是,兼容性越强的技术,成本越低,性能越差;兼容…

php内核介绍及扩展开发指南,4.5. 发布扩展信息

发布扩展信息扩展可以发布 phpinfo() 或反射API要求的信息。我们一起来看一下。本章不会太长,因为真的很简单。MINFO( ) 挂钩如果声明了,一切都在声明的 MINFO() 挂钩中进行。如果未声明,则引擎将运行默认功能以打印有关扩展名的信息。该功能…

2011年度中国地区网络安全威胁大事记

2011年6月28日晚20时左右,新浪微博突然爆发“病毒”,大批用户中招,“中毒”用户点击恶意链接后便并自动关注一位名为hellosamy的用户,之后开始自动转发微博和私信好友来继续传播恶意地址。不少认证用户中招,也导致该“…

ansible模块介绍

ansible 默认提供了很多模块来供我们使用。在 Linux 中,我们可以通过 ansible-doc -l 命令查看到当前ansible 都支持哪些模块,通过 ansible-doc -s 模块名 又可以查看该模块有哪些参数可以使用。 下面介绍比较常用的几个模块 copy模块file模块cron模块gr…

matlab迭代次数,怎么知道程序中的迭代次数呢

function [result,x,y]TS_BS1(num_1,num_2,c_i,d_j,M_i,T)%初始参数设置runcount 0;tabulength 3 num_1;candidate.x round(rand(1,num_1));y zeros(num_1,num_2);sum_d 0;for i 1:num_2sum_d sum_d d_j(i);endalfa 0.9;%初始化禁忌表for i 1:tabulengthtabulist(i)…

使用a标签调用手机系统的一些小技巧(打电话、发短信)

拨打电话&#xff1a; <a href"tel:181181181181">call me!</a> 号码前加“”&#xff0c;表示国际号码 <a href"tel:110">110</a> 发送短信&#xff1a; <a href"sms:123456789">给123456789发短信</a> …

ecshop api.php,api.php

/*** ECSHOP OPEN API统一接口* * 版权所有 2005-2011 商派网络&#xff0c;并保留所有权利。* ecshop.com* ----------------------------------------------------------------------------* 这不是一个自由软件&#xff01;您只能在不用于商业目的的前提下对程序代码进行修改…

Ajax乱码解决方案

2019独角兽企业重金招聘Python工程师标准>>> 方案1: 页面端: <% page language"java" contentType"text/html; charsetgb2312" pageEncoding"gb2312"%> http://www.w3.org/TR/html4/loose.dtd"> Ajax: function ve…

关键词联想关联 php,ECSHOP商品关键词模糊分词搜索插件,商品列表关键字加红功能...

各位ECSHOP网店系统用户大家好&#xff0c;欢迎来到ECSHOP商品关键词模糊分词搜索商品列表关键字加红功能。最近给客户做一个ECSHOP商城&#xff0c;发现ECSHOP的模糊搜索要求太高&#xff0c;需要加入and、空格、加号等&#xff0c;客户搜索的时候不可能这样操作。考虑到工期的…

花里胡哨,不协调统一的界面,正如看到一个穿花里胡哨衣服的人,让人作呕,不想接近。...

2019独角兽企业重金招聘Python工程师标准>>> 花里胡哨&#xff0c;不协调统一的界面&#xff0c;正如看到一个穿花里胡哨衣服的人&#xff0c;让人作呕&#xff0c;不想接近。 不要瞎变。 转载于:https://my.oschina.net/dongming/blog/40569

python全栈学习--day12(函数高级应用-带参数的装饰器,多个装饰器装饰一个函数)...

函数的执行时&#xff0c;*打散 函数的定义时&#xff0c;*聚合 from functools import wrapsdef wrapper(f):wraps(f)def inner(*args,**kwargs):执行函数之前的相关操作ret f(*args,**kwargs)执行函数之后的相关操作return retreturn inner wrapper def func1(*args):print…

Java学习总结 16个亮点

1.八大基本数据类型 byte(字节型8) int(整型;32;程序中一般默认为int型) short(短整型 16) long(长整型 32) float(浮点型 32) double(双精度浮点型 64) char(字符型 16) boolean(布尔型 只有true和false) 小范围内的整数类型可以通过赋值转化成大范围的数据类型.而大…

PHP聊天记录内啥,PHP的PSR系列轨范都有啥内容

PHP的PSR系列规范都有啥内容PSR是PHP Standard Recommendation的简写&#xff0c;它其实应该叫PSRs&#xff0c;即系列推荐标准&#xff1a;目前通过的规范有PSR-0(Autoloading Standard)、PSR-1(Basic Coding Standard)、PSR-2(Coding Style Guide)、PSR-3(Logger Interface)、…

选择排序法对数组进行排序

package selectionSort;import java.util.Arrays;public class Exam { //使用选择排序法对数组进行排序public static void main(String[] args) {int[] nums {23,3453,123,54,12,45,145,135,656,146,65};SelectionSort(nums);System.out.println(Arrays.toString(nums));}publ…