博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ThinkPHP 原生SQL查询
阅读量:6909 次
发布时间:2019-06-27

本文共 1494 字,大约阅读时间需要 4 分钟。

  hot3.png

原生SQL查询

尽管ThinkPHP内置了大量的数据操作方法,但ThinkPHP仍保留了对原生SQL查询的支持,以便满足复杂查询的需要和一些特殊的数据操作。

SQL查询的返回值是直接返回DB类的查询结果,没有做任何的处理,而且可以支持查询缓存。

原生SQL查询有 query() 和 execute() 两个方法:

  1. :用于 SQL 查询操作,并返回符合查询条件的数据集
  2. :更新和写入数据的 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 语句。

转载于:https://my.oschina.net/sunYwp/blog/791400

你可能感兴趣的文章
Android 在App和Java Web开发中的使用J2V8
查看>>
Ubuntu下打包解压命令
查看>>
事件冒泡与捕获详解
查看>>
art-template4.0使用
查看>>
jsp中使用EL获得contextPath
查看>>
SOFARPC 5.5.X 新版发布 | 集成 Nacos 与 Hystrix
查看>>
java String compareTo
查看>>
详解openstack命令启动实现流程及原理(nova --debug image-list)
查看>>
Java-NIO-Buffer详解
查看>>
elasticsearch elk最全java api 搜索 聚合、嵌套查询
查看>>
关于spring中使用多个quatz配置文件配置计划任务时,只有其中一个文件的任务有效的问题...
查看>>
锁屏时禁止让activity自动onCreate和onDestroy
查看>>
大数据日志收集框架之Flume入门
查看>>
android StringBuffer类的使用
查看>>
关于互联网+,工业互联网2025,互联网安全
查看>>
MyBatis构建sql
查看>>
hibernate配置文件 *.hbm.xml长时间加载不出来原因
查看>>
JSP基本语法
查看>>
如何实现phpcms v9_4X版本tag的伪静态?
查看>>
graphite-web render api
查看>>