zoukankan      html  css  js  c++  java
  • ThinkPHP教程_PHP框架之ThinkPHP(九)【查询语言】

    一、概述

      1、ThinkPHP支持直接使用字符串作为查询条件,但是大多数情况下推荐使用索引数组对象来作为查询条件,因为更加安全!

      2、查询条件可以用于CURD等任何操作,作为where方法的参数传入即可,ThinkPHP内置了非常灵活的查询方法,可以快速的进行数据查询操作,下面来一一讲解查询语言的内涵。

      3、查询语言分为普通查询、区间查询、组合查询、复合查询、统计查询、定位查询、SQL查询、动态查询

    二、普通查询

      查询条件可以为String、Array或Object类型

      1、字符串

      

      

      注意,如果连贯操作的方法采用String类型的参数,那么参数就得按照原生sql语句的写法。这里的"username='Tiger'"就验证了这句话,如果Tiger没有用''包起来,则会出错!

      2、数组(索引数组)

      

      

      3、对象

      

      

      4、不知道大伙有没有发现,以上关于参数Array和Object类型的两个例子只能做到了一个相等的查询条件,那么怎么通过Array或Object类型参数来实现更加复杂的查询条件呢(显然String类型参数是可以做到的,故不赘述)?即使用查询表达式。以Array类型为例,Object类型同理!$condition['字段名']=array('表达式','查询条件');即内层数组的第一个元素值表示表达式、第二个元素值表示查询条件。表达式不区分大小写

        ·eq(相等)

        

        

        ·neq(不等)

        ·gt(大于)

        ·egt(大于等于)

        ·lt(小于)

        ·elt(小于等于)

        ·like(同原生sql语句中的LIKE)

        可以进行模糊匹配

        

        

        在应用配置文件中可以配置DB_LIKE_FIELDS,那么被配置项匹配的字段将会自动进行模糊匹配。比如说$condition['username']='Tiger';相当于username like '%Tiger%'

        ·between/notbetween

        查询条件支持String或Array类型,即内层数组的第二个元素值可以是字符串或数组  

        

        

        ·in/notin

        查询条件同样支持String和Array类型

        

        

        ·exp

        表达式,支持更复杂的查询情况

        查询条件是一个按照原生sql语句格式书写的完整的查询表达式(可以使用原生sql语句支持的语法,包括使用sql函数、字段等等)(额,似乎回到了where(字符串查询条件)),即内层数组的第二个元素值是一个完整的查询表达式

        查询条件只支持String类型

        

        

        其不仅可以用于查询表达式,还可以用于更新操作

        

    三、区间查询

      ThinkPHP支持对某个字段进行区间查询

      

      

      内层数组最后一个元素值默认是'AND',也可以是'OR','XOR' 

      内层数组的最后一个元素之前并不是只可能有两个元素,而是可以有多个元素的,且元素值为数组

      

      

    四、组合查询

      1、ThinkPHP在进行多字段查询时,默认的逻辑关系是逻辑与(AND),可以通过外层数组元素键'_logic'指定逻辑关系

      

      

      2、通过外层数组元素键'_string'还可以实现数组条件与字符串条件混合使用

      

      

    五、复合查询

      通过外层数组元素键'_complex'可以指定查询子条件

      

      

    六、统计查询

      在实际开发中,经常会用到统计数据,比如说,当前所有(或满足某些条件)的用户数、所有用户的最大积分、用户的平均成绩等等。ThinkPHP会这些可能的统计操作都设计了相应的内置方法

      而且统计查询方法都支持连贯操作。那么显然可以用where()方法定义查询范围咯

      1、count()方法

      获取当前数据表的记录数

      

      2、max()方法

      获取数据表中某个字段最大值

      

      3、min()方法

      与max()同理

      4、avg()方法

      与max()同理

      5、sum()方法

      与max()同理

    七、定位查询

      ThinkPHP支持定位查询,但是必须要求当前模型继承高级模型类,可以使用getN()方法直接访问结果中某个位置的记录

      getN(正整数)、getN(负整数)、first()、last()

    八、SQL查询

      ThinkPHP仍然保留了原生的SQL查询(R)执行(CUD)操作支持,为了满足复杂查询的需要和一些特殊的数据操作,SQL查询的返回值是直接返回Db类的查询结果,没有做任何的处理。而且可以支持查询缓存

      1、query()方法

      有受影响行数,且有结果集,用该方法。参数为完整的原生sql语句

      2、execute()方法

      有受影响函数,没有结果集,用该方法。参数为完整的原生sql语句

    九、动态查询

      1、直接根据数据表的字段进行查询,但是只支持单字段

      

      

      2、获取符合条件的前N条记录

      直接使用topN()方法,同样的必须继承高级模型

      

      

      

      

      对于ThinkPHP的动态查询,咋一看可能不太好理解,可能会问,$User这个对象哪来的getByUsername()、top3()或top()方法呢?Model类和AdvModel类都没有这些方法,而自定义的UserModel类也没有这些方法?!

      PHP同JavaScript一样,也支持动态给对象添加公开的属性或方法!

      

      

      

      

      

        

        

  • 相关阅读:
    [WP]XCTF-Reversing-Newbie_calculations
    [WP]BUUCTF-Reverse-基础题(1-12)
    [WP]XCTF-notsequence
    [WP]XCTF-easyre-153
    [WP]XCTF- 攻防世界-crypto-新手练习区
    [WP]XCTF-simple-check-100
    [WP]XCTF-SignIn
    [WP]XCTF-666
    [WP]XCTF-Reversing-x64Elf-100
    [WP]XCTF-流浪者
  • 原文地址:https://www.cnblogs.com/TigerYangWTH/p/5826644.html
Copyright © 2011-2022 走看看