where方法的用法是ThinkPHP查询语言的精髓,也是ThinkPHP ORM的重要组成部分和亮点所在,可以完成包括普通查询、表达式查询、快捷查询、区间查询、组合查询在内的查询操作。where方法的参数支持字符串和数组,虽然也可以使用对象但并不建议。

字符串条件

使用字符串条件直接查询和操作,例如:

  1. $User = M("User"); // 实例化User对象
  2. $User->where('type=1 AND status=1')->select();

最后生成的SQL语句是

  1. SELECT * FROM think_user WHERE type=1 AND status=1

如果使用3.1以上版本的话,使用字符串条件的时候,建议配合预处理机制,确保更加安全,例如:

  1. $Model->where("id=%d and username='%s' and xx='%f'",array($id,$username,$xx))->select();

或者使用:

  1. $Model->where("id=%d and username='%s' and xx='%f'",$id,$username,$xx)->select();

如果$id变量来自用户提交或者URL地址的话,如果传入的是非数字类型,则会强制格式化为数字格式后进行查询操作。

字符串预处理格式类型支持指定数字、字符串等,具体可以参考vsprintf方法的参数说明。

数组条件

数组条件的where用法是ThinkPHP推荐的用法。

大理石平台厂家

普通查询

最简单的数组查询方式如下:

  1. $User = M("User"); // 实例化User对象
  2. $map['name'] = 'thinkphp';
  3. $map['status'] = 1;
  4. // 把查询条件传入查询方法
  5. $User->where($map)->select();

最后生成的SQL语句是

  1. SELECT * FROM think_user WHERE `name`='thinkphp' AND status=1
表达式查询

上面的查询条件仅仅是一个简单的相等判断,可以使用查询表达式支持更多的SQL查询语法,查询表达式的使用格式:

  1. $map['字段1'] = array('表达式','查询条件1');
  2. $map['字段2'] = array('表达式','查询条件2');
  3. $Model->where($map)->select(); // 也支持

表达式不分大小写,支持的查询表达式有下面几种,分别表示的含义是:

表达式 含义
EQ 等于(=)
NEQ 不等于(<>)
GT 大于(>)
EGT 大于等于(>=)
LT 小于(<)
ELT 小于等于(<=)
LIKE 模糊查询
[NOT] BETWEEN (不在)区间查询
[NOT] IN (不在)IN 查询
EXP 表达式查询,支持SQL语法

多次调用

3.1.3版本开始,where方法支持多次调用,但字符串条件只能出现一次,例如:

  1. $map['a'] = array('gt',1);
  2. $where['b'] = 1;
  3. $Model->where($map)->where($where)->where('status=1')->select();

多次的数组条件表达式会最终合并,但字符串条件则只支持一次。

更多的查询用法,可以参考查询语言部分。

where方法的用法是ThinkPHP查询语言的精髓的更多相关文章

  1. SIP中OPTIONS方法的用法及示例

    SIP中OPTIONS方法的用法及示例 用OPTIONS方法实现Keep Alive SIP keep-alive方法

  2. C# Path.Combine 方法的用法

    C#   Path.Combine 方法的用法 *.注意: string filePath3= Path.Combine(string path1,string path2): 情况一: path2中 ...

  3. ASP.NET中的ExecuteNonQuery()方法的用法

    下面我将详细讲解在机房收费系统D层中如何对数据库的增加.删除.修改,最后再来总结一下 ExecuteNonQuery(),ExecuteScalar(),ExecuteReader的用法: 一.增.删 ...

  4. Java用代码演示String类中的以下方法的用法

    用代码演示String类中的以下方法的用法 (1)boolean isEmpty(): 判断字符串是不是空串,如果是空的就返回true (2)char charAt(int index): 返回索引上 ...

  5. jQuery通用的全局遍历方法$.each()用法实例

    1.jQuery通用的全局遍历方法$.each()用法 2. test.json文件代码: 3. html代码 4.jQuery代码 <script src="jquery-1.3.1 ...

  6. Python中sorted()方法的用法

    Python中sorted()方法的用法 2012-12-24 22:01:14|  分类: Python |字号 订阅 1.先说一下iterable,中文意思是迭代器. Python的帮助文档中对i ...

  7. 【jQuery】praseFloat()方法的用法及注意事项

    [jQuery]praseFloat()方法的用法及注意事项 praseFloat():  用于解析一个字符串,并返回一个浮点数 语法:                praseFloat(strin ...

  8. Bootstrap 提示工具(Tooltip)插件方法的用法

    方法 下面是一些提示工具(Tooltip)插件中有用的方法: 方法 描述 实例 Options: .tooltip(options) 向元素集合附加提示工具句柄. $().tooltip(option ...

  9. pandas-15 df['one_col'].apply()方法的用法

    pandas-15 df['one_col'].apply()方法的用法 apply有点像map的用法,可以传入一个函数. 如:df['A'].apply(str.upper) import nump ...

随机推荐

  1. mysql查看数据库大小或者表大小

    要想知道每个数据库的大小的话,步骤如下: 1.进入information_schema 数据库(存放了数据库的信息) use information_schema; 2.查询所有数据库的大小: sel ...

  2. ADIS16405BMLZ

    GND,VCC,CS,DOUT,SCLK,DIN

  3. spring boot thymeleaf简单示例

    说实话,用起来很难受,但是人家官方推荐,咱得学 如果打成jar,这个就合适了,jsp需要容器支持 引入依赖 <dependency> <groupId>org.springfr ...

  4. Dribbble 流行的配色风格是什么?

    Dribbble 是众所周知的设计社群网站,在网站中有许多人分享设计作品,互相交流或从其他设计获取灵感.当然也有不少网站应运而生,例如 Freebbble 可免费下载 Dribbble 数千种设计素材 ...

  5. Docker学习のC/S模式

    我们操作docker是通过命令行客户端,然后和守护进程通信 以前的是通过命令行 我们还可以通过RemoApI的形式,通过自己的程序访问docker 和守护进程链接方式

  6. Docker的概念及基本用法

    Docker是PaaS供应商dotCloud开源的一个基于LXC 的高级容器引擎,源代码托管在 GitHub 上, 基于Go语言开发并遵从Apache 2.0协议开源.Docker提供了一种在安全.可 ...

  7. H5点击拨打电话,发短信

    phone(){ window.location.href = 'tel:123123'// 拨打电话 window.location.href = 'sms:123123'// 发短信 }

  8. mysql 存储过程学习 汇总

    存储过程框架 DEMILITER $$ -- 重定义符 DROP PROCEDURE IF EXISTS store_procedure$$ -- 如果存在此名的存储过程,先删除 CREATE PRO ...

  9. leetcode-分治

    题目169: 分治:O(nlgn) class Solution: def majorityElement(self, nums: List[int]) -> int: def majorE(l ...

  10. HDU5377

    题意:给sum,m组询问,每组x,y求\(x^t=y\mod p,p|sum\),p是素数,求最小的t 题解:先处理sum的所有质因子p,求出p的原根rt,\(rt^a=x\mod p,rt^b=y\ ...