From : http://huangqiqing123.iteye.com/blog/1540323

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

1、返回类型不同

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

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

2、读写统计需要

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

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

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

下面的方法是等效的

$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操作,不受影响,例如:

$User = D('User');

$User->query('select * from think_user where status=1');

$User->execute('update think_user set status=1 where id=1');

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

$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实现也是相当高效的。

最新文章

  1. 【从零开始学BPM,Day5】报表配置及自定义功能页面开发
  2. css zoom属性兼容ie,firefox,chrome
  3. Github上十大C#开源项目排行榜
  4. 投入Html5的怀抱,最近在研究的Egret
  5. [JAVA词形还原工具]Snowball
  6. centos7 新手基本命令
  7. 【HDOJ】1315 Basic
  8. CentOS、Ubuntu、Debian三个linux比较异同
  9. filter过滤action的问题
  10. iOS 横竖屏切换解决方案
  11. CSS布局之--各种居中
  12. webbug3.0靶场第二关
  13. ubuntu在终端下复制粘贴的2种方法
  14. 小tips:Hbuilder编辑器开启less自动编译为css的方法
  15. sql基本查询语句
  16. 有源汇有上下界最小流 DInic + 各种优化 模板
  17. [学习笔记]Javascript的包装对象
  18. Oracle数据库基础教程
  19. 在EditText中添加QQ表情
  20. txt文件匹配脚本

热门文章

  1. 【Java】 归并排序的非递归实现
  2. BeautifulSoup使用总结
  3. Python 之 Module Not Found Error: No module named 'openpyxl'
  4. ArduinoYun教程之ArduinoYun硬件介绍
  5. php7 & lua 压测对比
  6. 20172308《Java软件结构与数据结构》第二周学习总结
  7. MikroTik RouterOS虚拟机/实体机安装方法
  8. Gef最简单入门-HelloWold(2)
  9. delphi 消息的使用
  10. 大数据以及Hadoop相关概念介绍