TP里where的查询方式,比如or应该怎么写?

这应该是个基础。。只是我没有系统的学TP,所以用到了临时查了手册。

正常来说,thinkphp里的查询方式是:

 

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

使用字符串作为查询条件

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

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

最后生成的SQL语句是

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

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

使用数组作为查询条件

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

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

最后生成的SQL语句是

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

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

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

最后生成的SQL语句是

SELECT * FROM think_user WHERE `name`='thinkphp' OR `account`='thinkphp' 

使用对象方式来查询

这里以stdClass内置对象为例:

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

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

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

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

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

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

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

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

转载于:https://www.cnblogs.com/maohe/p/10648766.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值