当前位置:K88软件开发文章中心网站服务器框架ThinkPHP → 文章内容

查询方式

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-26 15:33:09

由 AdairSweet 创建, 最后一次修改 2016-02-24 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版本以上,当开启调试模式的话,则会抛出异常,显示:错误的查询条件。

查询方式