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语法(5)
Oct 09 PHP
mysql 字段类型说明
Apr 27 PHP
Windows下利用Gvim写PHP产生中文乱码问题解决方法
Apr 20 PHP
深入PHP nl2br()格式化输出的详解
Jun 05 PHP
php指定函数参数默认值示例代码
Dec 04 PHP
php 在线导入mysql大数据程序
Jun 11 PHP
php实现简单的MVC框架实例
Sep 23 PHP
作为程序员必知的16个最佳PHP库
Dec 09 PHP
php中this关键字用法分析
Dec 07 PHP
Yii2-GridView 中让关联字段带搜索和排序功能示例
Jan 21 PHP
php实现微信公众平台发红包功能
Jun 14 PHP
PHP中通过getopt解析GNU C风格命令行选项
Nov 18 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
在线增减.htpasswd内的用户
2006/10/09 PHP
PHP ? EasyUI DataGrid 资料存的方式介绍
2012/11/07 PHP
PHP 实现判断用户是否手机访问
2015/01/21 PHP
php结合mysql与mysqli扩展处理事务的方法
2016/06/29 PHP
简单的pgsql pdo php操作类实现代码
2016/08/25 PHP
简单的php购物车代码
2020/06/05 PHP
30个最好的jQuery 灯箱插件分享
2011/04/25 Javascript
图片在浏览器中底部对齐 解决方法之一
2011/11/30 Javascript
JavaScript:Div层拖动效果实例代码
2013/08/06 Javascript
jQuery 事件的命名空间简单了解
2013/11/22 Javascript
JQUERY dialog的用法详细解析
2013/12/19 Javascript
基于豆瓣API+Angular开发的web App
2015/01/02 Javascript
js实现超简单的展开、折叠目录代码
2015/08/28 Javascript
js实现选中页面文字将其分享到新浪微博
2015/11/05 Javascript
Jquery 1.9.1源码分析系列(十二)之筛选操作
2015/12/02 Javascript
jQuery.deferred对象使用详解
2016/03/18 Javascript
jQuery插件HighCharts绘制简单2D折线图效果示例【附demo源码】
2017/03/21 jQuery
vue2.0中click点击当前li实现动态切换class
2017/06/21 Javascript
十大 Node.js 的 Web 框架(快速提升工作效率)
2017/06/30 Javascript
JavaScript实现简单图片轮播效果
2017/08/21 Javascript
JS实现全屏预览F11功能的示例代码
2018/07/23 Javascript
nodejs分离html文件里面的js和css的方法
2019/04/09 NodeJs
如何优雅地在Node应用中进行错误异常处理
2019/11/25 Javascript
python中文编码问题小结
2014/09/28 Python
Python学习笔记之os模块使用总结
2014/11/03 Python
基于Python3 逗号代码 和 字符图网格(详谈)
2017/06/22 Python
Numpy数据类型转换astype,dtype的方法
2018/06/09 Python
python看某个模块的版本方法
2018/10/16 Python
Django unittest 设置跳过某些case的方法
2018/12/26 Python
python3实现点餐系统
2019/01/24 Python
phpquery中文手册
2021/03/18 PHP
提档介绍信范文
2015/10/22 职场文书
MySQL表的增删改查(基础)
2021/04/05 MySQL
MySQL Router实现MySQL的读写分离的方法
2021/05/27 MySQL
「睡美人」爱洛公主粘土人开订
2022/03/22 日漫
MySQL视图概念以及相关应用
2022/04/19 MySQL