thinkPHP框架中执行原生SQL语句的方法
本文实例讲述了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实现也是相当高效的。
thinkPHP框架中执行原生SQL语句的方法的更多相关文章
- Django中执行原生SQL语句【新编辑】
参考我的个人博客 这部分迁移到了个人博客中:Django中执行原生SQL语句 这里需要补充一下,还有一个extra方法: ret = models.Student.objects.all().extr ...
- django系列5.4--ORM中执行原生SQL语句, Python脚本中调用django环境
ORM执行原生sql语句 在模型查询API不够用的情况下,我们还可以使用原始的SQL语句进行查询. Django 提供两种方法使用原始SQL进行查询:一种是使用raw()方法,进行原始SQL查询并返回 ...
- 2016/05/13 thinkphp 3.2.2 ① 数据删除及执行原生sql语句 ②表单验证
[数据删除及执行原生sql语句] delete() 返回受影响的记录条数 $goods -> delete(30); 删除主键值等于30的记录信息 $goods -> delete( ...
- java:Hibernate框架3(使用Myeclipse逆向工程生成实体和配置信息,hql语句各种查询(使用hibernate执行原生SQL语句,占位符和命名参数,封装Vo查询多个属性,聚合函数,链接查询,命名查询),Criteria)
1.使用Myeclipse逆向工程生成实体和配置信息: 步骤1:配置MyEclipse Database Explorer: 步骤2:为项目添加hibernate的依赖: 此处打开后,点击next进入 ...
- Django之ORM执行原生sql语句
django中的ORM提供的操作功能有限,在模型提供的查询API不能满足实际工作需要时,可以在ORM中直接执行原生sql语句. Django 提供两种方法使用原生SQL进行查询:一种是使用raw()方 ...
- 执行原生SQL语句的方式
原生sql语句 cursor方法:from api.models import *from django.db import connection,connectionscursor=connecti ...
- orm分组,聚合查询,执行原生sql语句
from django.db.models import Avg from app01 import models annotate:(聚合查询) ret=models.Article.objects ...
- EF中执行原生sql与使用Local获取本地数据
使用DbSet的Local属性可以访问当前context中被追踪且没有被标记为删除的实体(内存中的数据) using (var context = new BloggingContext()) { / ...
- 在Hibernate中使用原生SQL语句
使用原生SQL查询必须注意:程序必须选出所有的数据列才可被转换成持久化实体.假设实体在映射时有一个<many-to-one../>的关联指向另外一个实体,则SQL查询中必须返回该<m ...
随机推荐
- TYVJ1340 送礼物
P1340 送礼物 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 作为惩罚,GY被遣送去帮助某神牛给女生送礼物(GY:貌似是个好差事)但是在GY看到礼物之后 ...
- BZOJ 4817数点涂色题解
题目链接 考试考了一道类似的题目,然后不争气的挂掉了,于是跑过来学习这道题的解法... 我还是太菜了.... 我们可以发现任意时刻,原树中颜色相同的点的集合一定是一条链, 即上面这种状态,而这种结构是 ...
- 【水滴石穿】imooc_gp
这个项目应该是一个标杆项目,看到之前很有几个项目都是按照这个项目的页面摆放顺序来的 不过可以作为自己做项目的一种方式 源码地址为:https://github.com/pgg-pgg/imooc_gp ...
- 【水滴石穿】React Native 组件之SafeAreaView
本文转载自:https://blog.csdn.net/xiangzhihong8/article/details/80692792 SafeAreaView简介 ReactNative官方从0.50 ...
- yii生成Model出错:yii-gii-generators-model-Generator.json No such file or dictory
讲runtime 这个文件夹添加权限 chmod o+w runtime
- word之图表目录中点号位置提升3磅
- JavaScript-- 函数既是函数又是对象
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- PHP核心编程-图像操作
一 图像操作环境: 1. 开启GD2图像处理并检测 在php.ini开启GD库 2. 画布坐标系说明 二. 图像基本操作(步骤) 1. 创建图像 创建画布(图像资源) 创建的方法: ...
- 【JZOJ4715】【NOIP2016提高A组模拟8.19】树上路径
题目描述 给出一棵树,求出最小的k,使得,且在树中存在路径p,使得k>=S且k<=E.(k为路径p上的边的权值和) 输入 第一行给出N,S,E.N代表树的点数,S,E如题目描述. 下面N- ...
- quarts之Cron表达式示例
cron表达式含义及范例如下: 字段名 允许的值 允许的特殊字符 秒 0- ...