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 相关文章推荐
mysq GBKl乱码
Nov 28 PHP
弄了个检测传输的参数是否为数字的Function
Dec 06 PHP
php中通过smtp发邮件的类,测试通过
Jan 22 PHP
PHP 开源AJAX框架14种
Aug 24 PHP
PHP中实现中文字符进制转换原理分析
Dec 06 PHP
php修改NetBeans默认字体的大小
Jul 02 PHP
php使用递归函数实现数字累加的方法
Mar 16 PHP
php发送邮件的问题详解
Jun 22 PHP
浅谈PHP拦截器之__set()与__get()的理解与使用方法
Oct 18 PHP
Referer原理与图片防盗链实现方法详解
Jul 03 PHP
PHP 技巧 * SVG 保存为图片(分享图生成)
Apr 02 PHP
eval(cmd)与eval($cmd)的区别与联系
Jul 07 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文件读写操作之文件写入代码
2011/01/13 PHP
php中对2个数组相加的函数
2011/06/24 PHP
php微信公众号js-sdk开发应用
2016/11/28 PHP
Thinkphp5 如何隐藏入口文件index.php(URL重写)
2019/10/16 PHP
JavaScript(JS) 压缩 / 混淆 / 格式化 批处理工具
2010/12/10 Javascript
用RadioButten或CheckBox实现div的显示与隐藏
2013/09/21 Javascript
JavaScript实现Java中StringBuffer的方法
2015/02/09 Javascript
jQuery处理图片加载失败的常用方法
2015/06/08 Javascript
JS根据浏览器窗口大小实时动态改变网页文字大小的方法
2016/02/25 Javascript
JS触发服务器控件的单击事件(详解)
2016/08/06 Javascript
基于react框架使用的一些细节要点的思考
2017/05/31 Javascript
JS闭包的几种常见形式实例详解
2017/09/16 Javascript
JS实现按钮添加背景音乐示例代码
2017/10/17 Javascript
Bootstrap 模态框多次显示后台提交多次BUG的解决方法
2017/12/26 Javascript
vue-router实现嵌套路由的讲解
2019/01/19 Javascript
Vue 封装防刷新考试倒计时组件的实现
2020/06/05 Javascript
[04:47]DOTA2-潍坊风行电子俱乐部探秘
2014/08/08 DOTA
在Python web中实现验证码图片代码分享
2017/11/09 Python
Python判断文件和字符串编码类型的实例
2017/12/21 Python
Python列表推导式与生成器用法分析
2018/08/02 Python
用python wxpy管理微信公众号并利用微信获取自己的开源数据
2019/07/30 Python
python 实现rolling和apply函数的向下取值操作
2020/06/08 Python
python输入中文的实例方法
2020/09/14 Python
css3实现超立体3D图片侧翻倾斜效果
2014/04/16 HTML / CSS
分享CSS3制作卡片式图片的方法
2016/07/08 HTML / CSS
法国太阳镜店:Sunglasses Shop
2016/08/27 全球购物
澳大利亚领先的孕妇服装品牌:Mamaway
2018/08/14 全球购物
塑料制成的可水洗的编织平底鞋和鞋子:Rothy’s
2018/09/16 全球购物
匡威爱尔兰官网:Converse爱尔兰
2019/06/09 全球购物
CheapTickets香港机票预订网站:CheapTickets.hk
2019/06/26 全球购物
what is the difference between ext2 and ext3
2013/11/03 面试题
艺术应用与设计个人的自我评价
2013/11/23 职场文书
初婚未育未抱养证明
2014/01/12 职场文书
星级党支部申报材料
2014/05/31 职场文书
怎么用Python识别手势数字
2021/06/07 Python
vue route新窗口跳转页面并且携带与接收参数
2022/04/10 Vue.js