thinkPHP框架中执行原生SQL语句的方法

thinkPHP框架中执行原生SQL语句的方法

这篇文章主要介绍了thinkPHP框架中执行原生SQL语句的方法,结合实例形式分析了thinkPHP中执行原生SQL语句的相关操作技巧,并简单分析了query与execute方法的使用区别,需要的朋友可以参考下

 

本文实例讲述了thinkPHP框架中执行原生SQL语句的方法。分享给大家供大家参考,具体如下:

怎样在thinkphp里面执行原生的sql语句?

?
1
2
3
$Model
=
new
Model();
//或者 $Model = D(); 或者 $Model = M();
$sql
=
"select * from `order`"
;
$voList
=
$Model
->query(
$sql
);

只是需要new一个空的模型继承Model中的方法。

注意query是查功能,execute是增删改功能

查询和读取属性值的实例:

?
1
2
3
4
5
6
$sql
=
"select * from goods"
;
$Model
= M();
$result
=
$Model
->query(
$sql
);
foreach
(
$result
as
$k
=>
$val
){
$goods_id
=
$val
[
"goods_id"
];
}

tP的模型可以支持原生SQL操作,提供了query和execute两个方法,为什么原生SQL还要区分两个方法呢,原因有两个:

1、返回类型不同

query用于查询,返回的是数据集,和select或者findall一样,所以可以直接在模板里面使用volist标签输出query的查询结果

execute用于写操作,返回的是状态或者影响的记录数

2、读写统计需要

为了便于统计当前的数据读写次数,把数据库的读和写操作分开(对应的就是query和execute)

使用原生SQL很简单,我们甚至不需要实例化任何的模型,例如:

?
1
$Model
=
new
Model();
// 实例化一个空模型

下面的方法是等效的

?
1
2
3
4
$Model
= D();
// 或者 $Model = M();
// 下面执行原生SQL操作
$Model
->query(
'select * from think_user where status=1'
);
$Model
->execute(
'update think_user set status=1 where id=1'
);

如果你实例化了某个模型,仍然可以执行原生SQL操作,不受影响,例如:

?
1
2
3
$User
= D(
'User'
);
$User
->query(
'select * from think_user where status=1'
);
$User
->execute(
'update think_user set status=1 where id=1'
);

在这种情况下面,我们可以简化SQL语句的写法,例如:

?
1
2
$User
->query(
'select * from __TABLE__ where status=1'
);
$User
->execute(
'update __TABLE__ set status=1 where id=1'
);

系统会自动把__TABLE__替换成当前模型对应的数据表名称,实际的数据表由模型决定。

通常来说,我们都是使用原生SQL操作实现一些ORM和CURD比较难实现的操作,另外,如果SQL不复杂的话 原生SQL的效率和连贯操作的效率差别是微乎其微的,TP本身的ORM实现也是相当高效的。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/113284.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 手把手教你配置linux下C++开发工具——vim+ycm(YouCompleteMe),支持基于语义的自动补全和第三方库补全(史上最简单、史上最透彻、史上最全的终极解决方案)

    手把手教你配置linux下C++开发工具——vim+ycm(YouCompleteMe),支持基于语义的自动补全和第三方库补全(史上最简单、史上最透彻、史上最全的终极解决方案)

    2020年11月8日
  • GridView导出Excel的超好样例「建议收藏」

    GridView导出Excel的超好样例「建议收藏」事实上网上有非常多关于Excel的样例,可是不是非常好,他们的代码没有非常全,读的起来还非常晦涩。经过这几天的摸索,最终能够完毕我想要导出报表Excel的效果了。以下是我的效果图。一.前台的页面图Gr

    2022年7月4日
  • Android开发入门案例「建议收藏」

    Android开发入门案例「建议收藏」初次接触安卓,做出来一个还能看的案例,类似小说阅读的APP,将源码记录一下一、案例效果1.登录界面2.注册界面3.用户信息显示界面4.小说阅读界面二、安卓代码1.AndroidManifest.xml<?xmlversion=”1.0″encoding=”utf-8″?><manifestxmlns:android=”http://schemas….

    2022年6月15日
  • android 设置标题栏背景颜色_状态栏菜单栏都在哪

    android 设置标题栏背景颜色_状态栏菜单栏都在哪android中沉浸式状态栏的文章已经满大街了,可是在实现某些效果时,还是得各种搜索,测试一通后,最后还常常满足不了要求,即使好不容易在一部手机上满足了需求,放在另外一手机上,发现效果差强人意。今天把自己这几天学到的关于沉浸式状态栏知识进行总结下。问题比如我想实现以下效果:1.同一个Activity需要动态变换标题栏和状态栏文字字体色值,该如何实现?2.一个Activity包含多个F

    2022年10月20日
  • 虚拟机ping不通主机,但是主机可以ping通虚拟机

    虚拟机ping不通主机,但是主机可以ping通虚拟机我在Windows10系统安装了虚拟机,设置的主机与虚拟机的连接方式是桥接,安装好后,发现虚拟机ping不通主机,但是主机可以ping通虚拟机。我的操作是:关闭防火墙,发现虚拟机可以ping通主机了。说明是Windows10防火墙阻止了。现在存在的问题是:如果我一直关闭防火墙也不是个事啊?这样做会影响我的电脑安全的。于是我想我要先确定防火墙阻止了什么,导致需要关闭防火墙?于是网上查看资…

    2022年10月23日
  • android toast位置_android studio toast不显示

    android toast位置_android studio toast不显示关键词:Android,Appium,Python,Toast1、什么是toast?toast是一个浮动的显示块,在Android中主要用于提示信息,超时后退出,常用于提示一些不是那么重要的信息;如果是重要的信息,会使用notification。toast比较难定位,一来因为它时间很短,一般3秒左右;二来toast元素一般不写在XML中,代码中直接去调用。Toast.makeText(getApp…

    2022年9月13日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号