thinkPHP数据库增删改查操作方法实例详解


Posted in PHP onDecember 06, 2016

本文实例讲述了thinkPHP数据库增删改查操作方法。分享给大家供大家参考,具体如下:

thinkphp对数据库增删改查进行了封装操作,使得使用更加方便,但是不一定灵活。

可以用封装的用,需要写sql,可以执行sql。

1.原始的

$Model = new Model(); // 实例化一个model对象 没有对应任何数据表
$insert_sql = "INSERT INTO sh_wxuser_collection (user_id,store_id,good_id,addtime) VALUES('".$user_id."','".$store_id."','".$good_id."','".$addtime."');";
$Model - >query($insert_sql);

2.针对表实例化的,这里的表原名是sh_wxuser_collection。sh是前缀。

$model = M('wxuser_collection'); //自动省去sh
$insert_sql = "INSERT INTO __TABLE__ (user_id,store_id,good_id,addtime) VALUES('".$user_id."','".$store_id."','".$good_id."','".$addtime."');";
$model - >query($insert_sql);

另一种写法,_可以写成大写,它会自动转化成_

$model = M('WxuserCollection'); //自动省去sh
$insert_sql = "INSERT INTO __TABLE__ (user_id,store_id,good_id,addtime) VALUES('".$user_id."','".$store_id."','".$good_id."','".$addtime."');";
$model - >query($insert_sql);

3. 封装的add语句

$model = M('WxuserCollection');
$data = array('user_id' = >$user_id, 'store_id' = >$store_id, 'good_id' = >$good_id, 'addtime' = >$addtime);
$model - >data($data) - >add();

4.封装的修改edit语句

$model = M('WxuserCollection');
$data = array('user_id' = >$user_id, 'store_id' = >$store_id, 'good_id' = >$good_id, 'addtime' = >$addtime);
$model - >data($data) - >where('id=3') - >save();

确实挺方便的,但是方便之余,别忘了原始的sql,原汁原味的sql,才最有意思。

5.find()

$model = M('WxuserCollection');
$res1 = $model - >find(1);
$res2 = $model - >find(2);
$res3 = $model - >where('good_id=1105 AND store_id = 1 AND user_id = 20') - >find();

find获取一条数据,find(1)获取id为1的数据,find(2)获取id为2的数据。最后一个是获取条件为where的中的第一条数据。

5.select()

$model = M('WxuserCollection');
$res = $model - >where('good_id=1105 AND store_id = 1 AND user_id = 20') - >field('id,good_id as good') - >select();

获取所有数据。这里的好处就是,不用考虑sql语句的顺序了,随心所欲调用函数就可以了。

6.delete()

$model = M('WxuserCollection');
$res = $model - >where('id=1') - >delete(); // 成功返回1 失败返回0

根据条件进行删除操作

thinkPHP数据库增删改查操作方法实例详解

7.field()

$model = M('WxuserCollection');
$res = $model - >field('id,good_id as good') - >select();
$res = $model - >field(array('id', 'good_id' = >'good')) - >select();
$res = $model - >field('id', true) - >select();

字符串,数组两种方式,第三个是表示获取处理id之外的所有字段。

8.order()

$model = M('WxuserCollection');
$res = $model - >order('id desc') - >select();
$res = $model - >order('id asc') - >select();
$res = $model - >order(array('id' = >'desc')) - >select();
$res = $model - >order(array('id')) - >select();

字符串,数组两种方式,默认asc。

9.join()

$Model->join(' work ON artist.id = work.artist_id')->join('card ON artist.card_id = card.id')->select();
$Model->join('RIGHT JOIN work ON artist.id = work.artist_id')->select();
$Model->join(array(' work ON artist.id = work.artist_id','card ON artist.card_id = card.id'))->select();

默认采用LEFT JOIN 方式,如果需要用其他的JOIN方式,可以改成第二种,

如果join方法的参数用数组的话,只能使用一次join方法,并且不能和字符串方式混合使用。

10.setInc()

$User = M("User"); // 实例化User对象
$User->where('id=5')->setInc('score',3); // 用户的积分加3
$User->where('id=5')->setInc('score'); // 用户的积分加1
$User->where('id=5')->setDec('score',5); // 用户的积分减5
$User->where('id=5')->setDec('score'); // 用户的积分减1

11.getField()

获取某个字段值

$User = M("User"); // 实例化User对象
// 获取ID为3的用户的昵称
$nickname = $User->where('id=3')->getField('nickname');

返回的nickname是一个字符串结果。也就是说,即使有满足条件的多个字段,也只会返回一个结果。

获取某个字段列

如果希望返回符合要求的字段列(多个结果),可以使用:

$User = M("User"); // 实例化User对象
// 获取status为1的用户的昵称列表
$nickname = $User->where('status=1')->getField('nickname',true);

第二个参数传入了true,返回的nickname则是一个数组,包含了所有满足条件的昵称列表。

如果需要限制返回结果数量,可以使用:

$nickname = $User->where('status=1')->getField('nickname',8);

获取2个字段列表

$User = M("User"); // 实例化User对象
 // 获取status为1的用户的昵称列表
$nickname = $User->where('status=1')->getField('id,nickname');

如果getField方法传入多个字段名称的话,默认返回一个关联数组,以第一个字段的值为索引(所以第一个字段要尽量选择不会重复的)。

获取多个字段列表

$result = $User->where('status=1')->getField('id,account,nickname');

如果传入了2个以上的字段名,则返回一个二维数组(类似select方法的返回值,区别在于索引是二维数组的键名是第一个字段的值)

综合使用案例

$where = array('a.store_id' => $this->store_id, 'a.user_id' => $this->user_id);
$collects = $this->collectModel->table("sh_wxuser_collection a")->field(array('b.name','b.price','b.oprice','b.logoimg','a.goods_id'))->limit($start, $offset)->order('a.addtime DESC')->where($where)->join(' sh_goods b ON a.goods_id = b.id')->select();// 获取当前页的记录
echo M()->getLastSql(); // 调试sql语句用
$count = $this->collectModel->table("sh_wxuser_collection a")->where($where)->count(); // 获取总的记录数

这里由于结合了两张表,所以用到了table方法,重新定义表名,相应的条件和参数都要加上前缀。a. 或者b.

其中field字段要么是一个字符串,要么是数组。

field('b.name', 'b.price', 'b.oprice', 'b.logoimg', 'a.goods_id') // 错误

我之前就这么写,问题大大的。

使用框架,就不能灵活的写sql了。不过对sql有一个深刻的认识,也有利于灵活的使用好框架。

用于调试sql语句的方法。

echo M()->getLastSql();

很方便。

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP如何利用P3P实现跨域
Aug 24 PHP
PHP 面向对象程序设计(oop)学习笔记 (二) - 静态变量的属性和方法及延迟绑定
Jun 12 PHP
ThinkPHP实现ajax仿官网搜索功能实例
Dec 02 PHP
php正则表达式获取内容所有链接
Jul 24 PHP
PHP中SSO Cookie登录分析和实现
Nov 06 PHP
WordPress网站性能优化指南
Nov 18 PHP
微信红包随机生成算法php版
Jul 21 PHP
PHP载入图像imagecreatefrom_gif_jpeg_png系列函数用法分析
Nov 14 PHP
PHP精确计算功能示例
Nov 29 PHP
php使用变量动态创建类的对象用法示例
Feb 06 PHP
ThinkPHP5.0框架结合Swoole开发实现WebSocket在线聊天案例详解
Apr 02 PHP
phpQuery解析HTML乱码问题(补充官网未列出的乱码解决方案)
Apr 01 PHP
thinkPHP中volist标签用法示例
Dec 06 #PHP
探究Laravel使用env函数读取环境变量为null的问题
Dec 06 #PHP
thinkphp中AJAX返回ajaxReturn()方法分析
Dec 06 #PHP
php中引用符号(&)的使用详细介绍
Dec 06 #PHP
thinkPHP简单实现多个子查询语句的方法
Dec 05 #PHP
thinkPHP自动验证机制详解
Dec 05 #PHP
thinkPHP中_initialize方法实例分析
Dec 05 #PHP
You might like
PHP实现获取客户端IP并获取IP信息
2015/03/17 PHP
CI框架出现mysql数据库连接资源无法释放的解决方法
2016/05/17 PHP
phalcon model在插入或更新时会自动验证非空字段的解决办法
2016/12/29 PHP
详谈配置phpstorm完美支持Codeigniter(CI)代码自动完成(代码提示)
2017/04/07 PHP
浅析PHP类的反射来实现依赖注入过程
2018/02/06 PHP
thinkPHP5.0框架事务处理操作简单示例
2018/09/07 PHP
Yii2结合Workerman的websocket示例详解
2018/09/10 PHP
js+css在交互上的应用
2010/07/18 Javascript
新增加的内容是如何将div的scrollbar自动移动最下面
2014/01/02 Javascript
jquery实现点击弹出层效果的简单实例
2014/03/03 Javascript
jQuery学习笔记之总体架构
2014/06/03 Javascript
jQuery实现隔行背景色变色
2014/11/24 Javascript
jQuery插件zTree实现删除树子节点的方法示例
2017/03/08 Javascript
angularJS利用ng-repeat遍历二维数组的实例代码
2017/06/03 Javascript
js实现移动端轮播图效果
2020/12/09 Javascript
webpack中使用iconfont字体图标的方法
2018/02/22 Javascript
Koa2微信公众号开发之消息管理
2018/05/16 Javascript
layer.close()关闭进度条和Iframe窗的方法
2018/08/17 Javascript
Angular(5.2->6.1)升级小结
2018/12/27 Javascript
vue-router命名路由和编程式路由传参讲解
2019/01/19 Javascript
[53:13]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第三场 1月18日
2021/03/11 DOTA
Python创建xml文件示例
2017/03/22 Python
Python 多线程的实例详解
2017/09/07 Python
Python闭包函数定义与用法分析
2018/07/20 Python
django url到views参数传递的实例
2019/07/19 Python
Python绘制股票移动均线的实例
2019/08/24 Python
Python环境Pillow( PIL )图像处理工具使用解析
2019/09/12 Python
Python 日志logging模块用法简单示例
2019/10/18 Python
最小二乘法及其python实现详解
2020/02/24 Python
python实现处理mysql结果输出方式
2020/04/09 Python
浅谈Python 钉钉报警必备知识系统讲解
2020/08/17 Python
戴尔加拿大官网:Dell加拿大
2016/09/17 全球购物
意大利团购网站:Groupon意大利
2016/10/11 全球购物
十佳青年个人事迹材料
2014/01/28 职场文书
销售经理助理岗位职责
2015/04/13 职场文书
完美处理python与anaconda环境变量的冲突问题
2021/04/07 Python