文档章节

ThinkPHP 原生SQL查询

ywppengpeng
 ywppengpeng
发布于 2016/11/21 13:48
字数 644
阅读 41
收藏 1

原生SQL查询

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

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

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

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

© 著作权归作者所有

共有 人打赏支持
ywppengpeng
粉丝 5
博文 63
码字总数 32377
作品 0
西安
程序员

暂无文章

一切都靠大数据:滴滴已封禁4.3万人员、车辆

这段时间以来,滴滴出行相继出炉了各种整改措施,包括自身安全建设和外部社会共建,昨日就刚刚宣布正在筹备建立安全监督顾问委员会。 据媒体最新报道,9月30日,上海市交通委员会执法总队、上...

linuxCool
26分钟前
2
0
awk命令用法介绍

10月18日任务 9.6/9.7 awk 1.awk(上)(下) 1.awk 分段操作功能 指定分隔符,并把第一段打印出来,不会改动文件内容 将所有内容打印出来 awk 没有指定分隔符号,则会默认用空格或者空白字符...

hhpuppy
今天
3
0
Spring Cloud Eureka Server高可用之:在线扩容

本文共 1591字,阅读大约需要 6分钟 ! 概述 业务微服务化以后,我们要求服务高可用,于是我们可以部署多个相同的服务实例,并引入负载均衡机制。而微服务注册中心作为微服务化系统的重要单元...

CodeSheep
今天
2
0
内网esxi主机上安装CoreOS虚拟机

CoreOS是一个为专门运行容器而设计的轻量级linux发行版,旨在通过轻量的系统架构和灵活的应用程序部署能力简化数据中心的维护成本和复杂度。它没有包管理工具,运行容器化应用以提供服务;默...

hiwill
今天
1
0
20181018 上课截图

![](https://oscimg.oschina.net/oscnet/49f66c08ab8c59a21a3b98889d961672f30.jpg) ![](https://oscimg.oschina.net/oscnet/a61bc2d618b403650dbd4bf68a671fabecb.jpg)......

小丑鱼00
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部