ThinkPHP 原生SQL查询
2014-01-29 17:18
316 查看
原生SQL查询
尽管ThinkPHP内置了大量的数据操作方法,但ThinkPHP仍保留了对原生SQL查询的支持,以便满足复杂查询的需要和一些特殊的数据操作。SQL查询的返回值是直接返回DB类的查询结果,没有做任何的处理,而且可以支持查询缓存。
原生SQL查询有 query() 和 execute() 两个方法:
query():用于 SQL 查询操作,并返回符合查询条件的数据集
execute():更新和写入数据的 SQL 操作,返回影响的记录数
query()
query() 方法是用于 SQL 查询操作,和select()方法一样返回符合查询条件的数据集。例子:
public function read(){ // 实例化一个空模型,没有对应任何数据表 $Dao = M(); //或者使用 $Dao = new Model(); $list = $Dao->query("select * from user where uid<5"); if($list){ $this->assign('list', $list ); $this->display(); } else { $this->error($Dao->getError()); } }
对于 query() 方法返回的数据集,跟 select() 一样,可以在模板里直接循环输出。
execute()
execute() 方法用于更新和写入数据的 SQL 操作(注:非查询操作,无返回数据集),返回影响的记录数。例子:
public function read(){ header("Content-Type:text/html; charset=utf-8"); // 实例化一个空模型,没有对应任何数据表 $Dao = M(); //或者使用 $Dao = new Model(); $num = $Dao->execute("update user set email = '12345@xxx.com' where uid=3"); if($num){ echo '更新 ',$num,' 条记录。'; }else{ echo '无记录更新'; } }
如果查询比较复杂或一些特殊的数据操作不能通过 ThinkPHP 内置的 ORM 和 ActiveRecord 模式实现时,就可以通过直接使用原生 SQL 查询来实现。
注意:以上都是 user 没有表前缀的例子,在查询语句中,查询的表应该写实际的表名字(包括前缀)。
小技巧
原生 SQL 查询需要在查询语句中写上对应的表名,如果表名有改动的时候,就需要逐行去更改 SQL 语句中的表名字,这样不免麻烦。ThinkPHP 提供了一个小技巧来帮助解决这个问题。在 SQL 语句中,以 __TABLE__ 来替代真实的表名,而在实例化模型时,仍以表名为参数,如:
public function read(){ $Dao = M("User"); $list = $Dao->query("select __TABLE__ from user where uid<5"); }
系统在解析的时候会自动替换成当前模型对应的表名,这样就可以做到即使表名有所变化,只需修改实例化对应的表名即可而不用修改原生的 SQL 语句。
相关文章推荐
- Thinkphp原生SQL查询解析支持
- Thinkphp原生SQL查询解析支持
- ThinkPHP 原生SQL查询
- 如何在ThinkPHP里面使用原生的SQL查询操作
- Thinkphp原生的sql查询及执行操作
- 15、Hibernate的原生sql查询,优化Hibernate的查询效率
- thinkphp 原生sql使用分页类
- hibernate中使用原生sql查询
- Hibernate 使用原生SQL查询oracle数据库显示问题(char,Date)
- Nhibernate操作原生SQL以及查询DataTable
- 2016/05/13 thinkphp 3.2.2 ① 数据删除及执行原生sql语句 ②表单验证
- HibernateTemplate 查询原生sql及ljava.lang.object cannot be cast to
- Python 查询原生sql,model转json
- Hibernate原生sql查询返回结果问题
- Hibernate使用原生SQL多表查询时字段名相同导致查询数据覆盖问题解决办法
- Hibernate 原生SQL 与 (标量查询、字符串查询、实体查询)
- 对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()
- Hibernate SQLQuery 原生SQL 查询及返回结果集处理-2
- Hibernate-原生SQL查询