php,$sql = "SELECT * FROM users WHERE age > 18";,
“一、基础查询
1、基本语法:在PHP中,使用WHERE
子句来过滤SELECT查询结果的条件语句,它可以根据指定的条件限制从数据库表中检索数据的范围。WHERE
子句通常与SELECT
语句一起使用,语法如下:
SELECT 列名 FROM 表名 WHERE 条件;
选择名为“users”的表中所有年龄大于18的用户:$query = “SELECT * FROM users WHERE age > 18”;
2、常见运算符:
等于(=):用于比较两个值是否相等。SELECT * FROM users WHERE age = 18;
不等于(<>或!=):用于比较两个值是否不相等。SELECT * FROM users WHERE age != 18;
大于(>):用于比较左边的值是否大于右边的值。SELECT * FROM users WHERE age > 18;
小于(<):用于比较左边的值是否小于右边的值。SELECT * FROM users WHERE age < 18;
大于等于(>=):用于比较左边的值是否大于或等于右边的值。SELECT * FROM users WHERE age >= 18;
小于等于(<=):用于比较左边的值是否小于或等于右边的值。SELECT * FROM users WHERE age <= 18;
3、逻辑运算符组合条件:
AND:用于组合多个条件,只有当所有条件都为真时,结果才为真,选择年龄大于18且居住在纽约的用户:$query = “SELECT * FROM users WHERE age > 18 AND city = ‘New York'”;
OR:用于组合多个条件,只要有一个条件为真,结果就为真,选择年龄大于18或者居住在纽约的用户:$query = “SELECT * FROM users WHERE age > 18 OR city = ‘New York'”;
4、IN操作符:用于指定一组值,如果值等于列表中的任意一个值,则返回数据,选择名字为"Alice"、"Bob"或者"Charlie"的用户:
PHP代码示例:
$names = array('Alice', 'Bob', 'Charlie'); $inClause = "'" . implode("','", $names) . "'"; $query = “SELECT * FROM users WHERE name IN ($inClause)”;
5、LIKE操作符进行模糊搜索:用于模糊匹配,可以在查询中使用通配符,选择名字中包含"John"的用户:
$query = “SELECT * FROM users WHERE name LIKE '%John%'”;
其中%
表示任意数量的字符,_
表示单个字符。
6、IS NULL或IS NOT NULL:用于判断某列的值是否为空,选择用户名列为空的用户:
$query = “SELECT * FROM users WHERE username IS NULL”;
二、ThinkPHP框架中的where方法
1、字符串条件:
使用字符串条件直接查询和操作,实例化User对象后,筛选type为1且status为1的用户并查询:$User = M("User"); $User>where('type=1 AND status=1')>select();
如果使用3.1以上版本,建议配合预处理机制确保安全,防止SQL注入攻击:$Model>where("id=%d and username='%s' and xx='%f'",array($id,$username,$xx))>select();
如果变量来自用户提交或URL地址,非数字类型会强制格式化为数字格式后进行查询操作。
2、数组条件(推荐用法):
普通查询:最简单的数组查询方式如下:
PHP代码示例:
$User = M("User"); // 实例化User对象 $map['name'] = 'thinkphp'; $map['status'] = 1; // 把查询条件传入查询方法 $User>where($map)>select();
最后生成的SQL语句是:SELECT * FROM think_user WHERE name='thinkphp' AND status=1
表达式查询:支持更多的SQL查询语法,查询表达式的使用格式为$map['字段1'] = array('表达式','查询条件1');
,表达式不分大小写,支持的查询表达式有EQ(等于)、NEQ(不等于)、GT(大于)、EGT(大于等于)、LT(小于)、ELT(小于等于)、LIKE(模糊查询)、[NOT]BETWEEN(不在区间查询)、[NOT]IN(不在IN查询)、EXP(表达式查询,支持SQL语法)。
EQ:等于(=),如$map['id'] = array('eq',100);
表示查询条件为id = 100
。
NEQ:不等于(<>),如$map['id'] = array('neq',100);
表示查询条件为id <> 100
。
GT:大于(>),如$map['id'] = array('gt',100);
表示查询条件为id > 100
。
EGT:大于等于(>=),如$map['id'] = array('egt',100);
表示查询条件为id >= 100
。
LT:小于(<),如$map['id'] = array('lt',100);
表示查询条件为id < 100
。
ELT:小于等于(<=),如$map['id'] = array('elt',100);
表示查询条件为id <= 100
。
[NOT]LIKE:同SQL的LIKE,如$map['name'] = array('like','thinkphp%');
查询条件变为name like 'thinkphp%'
。
[NOT]BETWEEN:同SQL的[not]between,查询条件支持字符串或者数组,如$map['id'] = array('between','1,8');
查询条件变为id BETWEEN 1 AND 8
。
[NOT]IN:同SQL的[not]in,查询条件支持字符串或者数组,如$map['id'] = array('not in','1,5,8');
查询条件变为id NOT IN (1,5,8)
。
EXP:表达式查询,支持更复杂的查询情况,如$map['id'] = array('in','1,3,8');
可以改成$map['id'] = array('exp',' IN (1,3,8) ');
。
快捷查询:支持不同字段相同的查询条件和不同字段不同的查询条件。
实现不同字段相同的查询条件:$user = m("user"); $map['name|title'] ='thinkphp'; $user>where($map)>select();
查询条件变为name= 'thinkphp' or title = 'thinkphp'
。
实现不同字段不同的查询条件:$user = m("user"); $map['status&title'] =array('1','thinkphp','_multi'=>true); $user>where($map)>select();
查询条件变为status= 1 and title = 'thinkphp'
,注意“|”和“&”不能同时使用。
区间查询:支持对某个字段的区间查询,$map['id'] = array(array('gt',1),array('lt',10));
得到的查询条件是:(id > 1) and (id < 10)
,最后一个可以是and、or或者xor运算符,如果不写,默认是and运算,区间查询的条件可以支持普通查询的所有表达式。
组合查询:用于复杂的查询条件,主体采用数组方式查询,只是加了一些额外的处理。
PHP代码示例:
$map['id'] = array('between',array('1','8'),'and'); $map['name'] = array('like','think%'); $result = M("user")>where($map)>select();
此查询将返回一个包含匹配行的二维数组。
相关问题解答
1、如何在PHP中防止SQL注入攻击?
答:应始终对用户输入的参数进行适当的过滤和转义,例如使用预处理语句或转义函数,在ThinkPHP中,如果使用字符串条件,建议配合预处理机制,确保更加安全。
2、在ThinkPHP中如何使用where方法进行模糊查询?
答:可以使用LIKE操作符进行模糊查询,格式为$map['字段名'] = array('like','模糊查询内容');
,要查询名字中包含"thinkphp"的用户,可以使用$map['name'] = array('like','%thinkphp%');
。
来源互联网整合,作者:小编,如若转载,请注明出处:https://www.aiboce.com/ask/140566.html