企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## 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();// 提交本次事务 ~~~