ThinkPHP中如何使用原生SQL【原创】
2014-12-19 00:00
453 查看
TP的模型可以支持原生SQL操作,提供了query和execute两个方法,为什么原生SQL还要区分两个方法呢,原因有两个:
1、返回类型不同
query用于查询,返回的是数据集,和select或者findall一样,所以可以直接在模板里面使用volist标签输出query的查询结果
execute用于写操作,返回的是状态或者影响的记录数
2、读写统计需要
为了便于统计当前的数据读写次数,把数据库的读和写操作分开(对应的就是query和execute)
使用原生SQL很简单,我们甚至不需要实例化任何的模型,例如:
下面的方法是等效的
// 下面执行原生SQL操作
如果你实例化了某个模型,仍然可以执行原生SQL操作,不受影响,例如:
在这种情况下面,我们可以简化SQL语句的写法,例如:
系统会自动把__TABLE__替换成当前模型对应的数据表名称,实际的数据表由模型决定。
通常来说,我们都是使用原生SQL操作实现一些ORM和CURD比较难实现的操作,另外,如果SQL不复杂的话 原生SQL的效率和连贯操作的效率差别是微乎其微的,TP本身的ORM实现也是相当高效的。
其实在thinkphp里面的Model里面是内置了query方法的,如果我们要执行原生的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实现也是相当高效的。
其实在thinkphp里面的Model里面是内置了query方法的,如果我们要执行原生的sql语句方法很简单,如下:
$Model = new Model(); $sql = "select * from `order`"; $voList = $Model->query($sql);
相关文章推荐
- [转]ThinkPHP中如何使用原生SQL
- 如何在ThinkPHP里面使用原生的SQL查询操作
- 【原创】如何使用一句SQL计算工作日天数?
- thinkphp 原生sql使用分页类
- Thinkphp使用原生sql语句添加字段
- 如何在SQL*PLUS中使用Autotrace?(看执行计划)
- 如何在定义游标的时候使用动态sql语句?
- Oracle PL/SQL中如何使用%TYPE和%ROWTYPE
- 如何解决ADO.NET访问Access数据库出现"操作必须使用一个可更新的查询"的问题(非原创,摘自书中)
- 如何使用SQL*Loader?
- 如何使用 Transact-SQL 执行事务处理
- 如何使用SQL语句复制表结构
- 如何在Oracle中使用游标来实现多重循环?[原创]
- 如何使用 Visual Studio .NET 工具创建数据库对象和 Transact-SQL 存储过程。
- VIsual Basic 2005 - 如何使用 SqlBulkCopy 对象来执行大量复制作业
- [原创].Net“破解”新招——如何使用不带私钥的程序集?
- VBA与T-SQL之间的函数比较;SQL Server的SQL语句如何在ACCESS中使用?(转自http://access911.net)
- [原创]ListView控件如何使用系统图标 -- win32汇编
- PL/SQL DEVELOPER 6模板使用入门(原创)
- ADO.NET 開發高手線上教學課程第六集 - 如何使用資料讀取器 (SqlDataReader)