ThinkPHP可以支持直接使用字符串作为查询条件,但是大多数情况推荐使用数组或者对象来作为查询条件,因为会更加安全。

大理石平台哪家好

一、使用字符串作为查询条件

这是最传统的方式,但是安全性不高,例如:

  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

采用字符串查询的时候,我们可以配合使用字符串条件的安全预处理机制。

二、使用数组作为查询条件

这种方式是最常用的查询方式,例如:

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

最后生成的SQL语句是

  1. SELECT * FROM think_user WHERE `name`='thinkphp' AND status=1

如果进行多字段查询,那么字段之间的默认逻辑关系是 逻辑与 AND,但是用下面的规则可以更改默认的逻辑判断,通过使用 _logic 定义查询逻辑:

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

最后生成的SQL语句是

  1. SELECT * FROM think_user WHERE `name`='thinkphp' OR `account`='thinkphp'
三、使用对象方式来查询

这里以stdClass内置对象为例:

  1. $User = M("User"); // 实例化User对象
  2. // 定义查询条件
  3. $condition = new stdClass();
  4. $condition->name = 'thinkphp';
  5. $condition->status= 1;
  6. $User->where($condition)->select();

最后生成的SQL语句和上面一样

  1. SELECT * FROM think_user WHERE `name`='thinkphp' AND status=1

使用对象方式查询和使用数组查询的效果是相同的,并且是可以互换的,大多数情况下,我们建议采用数组方式更加高效。

使用数组和对象方式查询的时候,如果传入了不存在的查询字段是会被自动过滤的,例如:

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

因为数据库的test字段是不存在的,所以系统会自动检测并过滤掉$condition['test'] = 'test'这一查询条件。

如果是3.2.2版本以上,当开启调试模式的话,则会抛出异常,显示:错误的查询条件

ThinkPHP可以支持直接使用字符串作为查询条件的更多相关文章

  1. thinkphp分页效果的制作,按查询条件分页正确做法

    PHP代码: <?php namespace Home\Controller; use Think\Controller; use Home\Clas\Cate; class IndexCont ...

  2. Thinkphp 查询条件 and 和 or同时使用即复合查询

            thinkphp 3.2快捷查询OR查询&分割表示AND查询讲解         快捷查询方式是一种多字段查询的简化写法,可以进一步简化查询条件的写法,在多个字段之间用|分割表 ...

  3. Thinkphp用exp表达式执行mysql语句,查询某字段不为空is not null,自动增值

    Thinkphp用exp表达式执行mysql语句,查询某字段不为空is not null,自动增值 Thinkphp 的文档经常不够完整的表达MYSQL的各种组合,is not null在thinkp ...

  4. Thinkphp分页时查询条件保存方法

    web应用中经常要根据用户提交的查询条件进行过滤,再以列表方式显示在浏览器上.如果这种查询是多种条件的组合,并要进行分页显示,则如何在分页导航中保持查询条件,是必须解决的问题. 在Thinkphp中, ...

  5. oracle入门(8)——实战:支持可变长参数、多种条件、多个参数排序、分页的存储过程查询组件

    [本文介绍] 学了好几天,由于项目需要,忙活了两天,写出了个小组件,不过现在还只能支持单表操作.也没考虑算法上的优化,查询速度要比hibernate只快了一点点,可能是不涉及多表查询的缘故吧,多表的情 ...

  6. query_string查询支持全部的Apache Lucene查询语法 低频词划分依据 模糊查询 Disjunction Max

    3.3 基本查询3.3.1词条查询 词条查询是未经分析的,要跟索引文档中的词条完全匹配注意:在输入数据中,title字段含有Crime and Punishment,但我们使用小写开头的crime来搜 ...

  7. thinkphp 同一字段不同查询条件实现

    搞定了 另外区间查询还可以支持更多的条件,只要是针对一个字段的条件都可以写到一起,例如:$map['name'] = array(array('like','%a%'), array('like',' ...

  8. Thinkphp的 is null 查询条件是什么,以及exp表达式如何使用

    Thinkphp的 is null 查询条件是什么,以及exp表达式如何使用 一.总结 一句话总结:$map['name'] = array('exp','is null'); 1.is null判断 ...

  9. ThinkPHP 模板substr的截取字符串函数

    ThinkPHP 模板substr的截取字符串函数在Common/function.php加上以下代码 /** ** 截取中文字符串 **/ function msubstr($str, $start ...

随机推荐

  1. IntelliJ IDEA无法创建springboot项目解决办法

    最佳解决办法:IntelliJ IDEA---右键---以管理员身份运行. 方法二: 1.打开控制面板--系统和安全--windows防火墙 2.找到自己的默认浏览器,打勾,这里是谷歌浏览器 3.打开 ...

  2. hashmap1.7的死锁模拟

    package com.cxy.springdataredis.hashmap; import javax.lang.model.element.VariableElement; import jav ...

  3. java面试官如何面试别人

                                                                                      java面试官如何面试别人(一) j ...

  4. 【FHQ-Treap】P4146 序列终结者

    题意: 给定一个序列,支持区间加,区间反转,区间max询问 裸的平衡树题,这里采用FHQ-Treap 每个节点多记录一个max值和两个lazy_tag,暴力Push_Down即可(大常数选手) 打完这 ...

  5. VMware的使用-永久激活码

    1.在软件管理中下载安装VMware  版本为14.0   试用期为30天 2.在网上找的永久破解码 VMware 2018 v14.x 永久许可证激活密钥FF31K-AHZD1-H8ETZ-8WWE ...

  6. pom parent 标签

    <!--parent用于引用父工程 1.统一管理jar包的版本,其依赖需要在子工程中定义才有效(比如此例) 2.统一的依赖管理(父工程的<dependencies>,子工程不必重新引 ...

  7. thinkphp 前置和后置操作

    前置和后置操作指的是在执行某个操作方法之前和之后会自动调用的方法,不过仅对访问控制器有效. 其他的分层控制器层和内部调用控制器的情况下前置和后置操作是无效的. 系统会检测当前操作是否具有前置和后置操作 ...

  8. [TJOI 2018]游园会

    题意:求NOI的合法串... 思路: 首先这个似乎和后缀自动机没关系(话说TJ不考后缀自动机??),其实就是一个\(DP\)套\(DP\),考虑如果不看兑奖串就是一个LCS,当出现时多记一维即可. # ...

  9. 杂项-IM:IM(即时通讯),一种基于互联网的即时交流消息的业务

    ylbtech-杂项-IM:IM(即时通讯),一种基于互联网的即时交流消息的业务 即时通讯(Instant Messaging)是目前Internet上最为流行的通讯方式,各种各样的即时通讯软件也层出 ...

  10. Hive学习详细版

    一.概述 1.Hadoop的开发问题 只能用java语言开发,存在语言门槛 需要对Hadoop底层原理,api比较了解才能做开发 开发调试比较麻烦 2.什么是Hive Hive是基于Hadoop的一个 ...