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学习之字符串比较和查找
Apr 17 PHP
PHP字符串函数系列之nl2br(),在字符串中的每个新行 (\n) 之前插入 HTML 换行符br
Nov 10 PHP
PHP实现格式化文件数据大小显示的方法
Jan 03 PHP
Zend Framework+smarty用法实例详解
Mar 19 PHP
详解Laravel视图间共享数据与视图Composer
Aug 04 PHP
Symfony2获取web目录绝对路径、相对路径、网址的方法
Nov 14 PHP
thinkphp实现把数据库中的列的值存到下拉框中的方法
Jan 20 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
Dec 21 PHP
PHP折半(二分)查找算法实例分析
May 12 PHP
Thinkphp 框架扩展之行为扩展原理与实现方法分析
Apr 23 PHP
PHP7 新增常量
Mar 09 PHP
阿里云服务器搭建Php+Apache运行环境的详细过程
May 15 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中文字母数字验证码实现代码
2008/04/25 PHP
一个显示效果非常不错的PHP错误、异常处理类
2014/03/21 PHP
PHP的运行机制与原理(底层)
2015/11/16 PHP
yii2带搜索功能的下拉框实例详解
2016/05/12 PHP
详细解读php的命名空间(一)
2018/02/21 PHP
解决extjs在firefox中关闭窗口再打开后iframe中js函数访问不到的问题
2008/11/06 Javascript
javascript 动态数据下的锚点错位问题解决方法
2008/12/24 Javascript
Ext JS Grid在IE6 下宽度的问题解决方法
2009/02/15 Javascript
jQuery动态效果显示人物结构关系图的方法
2015/05/07 Javascript
JavaScript高级程序设计(第三版)学习笔记6、7章
2016/03/11 Javascript
AngularJS中的$watch(),$digest()和$apply()区分
2016/04/04 Javascript
利用BootStrap弹出二级对话框的简单实现方法
2016/09/21 Javascript
JavaScript中正则表达式判断匹配规则及常用方法
2017/08/03 Javascript
Vue结合SignalR实现前后端实时消息同步
2017/09/19 Javascript
浅谈小程序 setData学问多
2019/02/20 Javascript
JS左右无缝轮播功能完整实例
2019/05/16 Javascript
JS XMLHttpRequest原理与使用方法深入详解
2020/04/30 Javascript
前端使用crypto.js进行加密的函数代码
2020/08/16 Javascript
python实现简单socket程序在两台电脑之间传输消息的方法
2015/03/13 Python
python中MethodType方法介绍与使用示例
2017/08/03 Python
Python使用文件锁实现进程间同步功能【基于fcntl模块】
2017/10/16 Python
Python import与from import使用及区别介绍
2018/09/06 Python
python爬取酷狗音乐排行榜
2019/02/20 Python
Python3 列表,数组,矩阵的相互转换的方法示例
2019/08/05 Python
python配置文件写入过程详解
2019/10/19 Python
sklearn+python:线性回归案例
2020/02/24 Python
Python常用数据分析模块原理解析
2020/07/20 Python
香港家用健身器材、运动器材及健康美容仪器专门店:FitBoxx
2019/12/05 全球购物
科颜氏香港官方网店:Kiehl’s香港
2021/03/07 全球购物
某/etc/fstab文件中的某行如下: /dev/had5 /mnt/dosdata msdos defaults,usrquota 1 2 请解释其含义
2013/09/18 面试题
元旦联欢会感言
2014/03/04 职场文书
2015年办公室文秘工作总结
2015/04/30 职场文书
Golang的继承模拟实例
2021/06/30 Golang
Javascript设计模式之原型模式详细
2021/10/05 Javascript
SpringDataJPA在Entity中常用的注解介绍
2021/12/06 Java/Android
vue配置型表格基于el-table拓展之table-plus组件
2022/04/12 Vue.js