ShopCMS 开发文档
HFramework 开发文档

4.4 构造查询条件-关联数组

通过构造查询条件数组,可以使您不必编写SQL语句,即可快速、安全的自动生成强大的查询条件。
构造的查询条件数组,可以用于上一节的查询条件参数,也可以用于框架数据库的查询条件参数。
在数据库查询过程中,通过构造查询条件数组生成的查询语句,事实上均是以PDO的参数绑定的形式执行的。此处为解说方便,绑定参数处显示的是将被替换的值
构造规则也比较简单,举例如下:

1,构造简单的查询:
array('a'=>1, 'b'=>2, '@exp'=>'AND', '@conn'=>'AND')
构造的查询语句为:
WHERE `a`=1 AND `b`=2
上述构造语句中:
@exp:表示匹配方式,可以不设置,默认为 = ,不区分大小写,
    可选值有:=、>、>=、<、<=、!=、<>、IN、LIKE、LEFT LIKE、RRIGHT LIKE
@conn:表示多个匹配项之间的逻辑关系,可以不填,默认为 AND,不区分大小写,
    可选值有:AND、OR
上述构造数组等同于:
array('a'=>1, 'b'=>2)

2,构造简单的模糊查询:
array('user'=>'test', '@exp'=>'LIKE')
构造的查询语句为:
WHERE `user` LIKE '%test%'
上述条件数组构造了左右模糊匹配的查询语句,如果@exp的值为 LEFT LIKE 或者 RIGHT LIKE,则构造的查询语句分别如下:
@exp => LEFT LIKE,则:WHERE `user` LIKE '%test'
@exp => RIGHT LIKE,则:WHERE `user` LIKE 'test%'


3,构造IN查询:
array('e'=>'6,7,8', '@exp'=>'IN');
构造的查询语句为:
WHERE `e` IN (6,7,8)
说明:
IN值按照SQL语句的习惯,多个值用英文逗号分隔,不可有空格;
PDO不支持IN的参数绑定,我们对此做了优化,对于IN值中的每一个值,都是以单独绑定的形式实现参数绑定的。

4,构造嵌套的查询条件:
array(
	'a'=>1, 
	'b'=>2,
	array('c1'=>3, 'c2'=>4, '@exp'=>'>', '@conn'=>'OR'),
	'@exp'=>'=',//此行可以省略
	'@conn' => 'AND',//此行可以省略
);
构造的查询语句为:
WHERE `a` = 1 AND `b` = 2 AND (`c1` > 3 OR `c2` > 4)


5,构造多次嵌套的查询条件:
array(
	'a'=>1, 
	'b'=>2,
	array('c1'=>3, 'c2'=>4, '@exp'=>'>', '@conn'=>'OR'),
	array('d'=>5, '@exp'=>'!=', '@conn'=>'OR'),//此行中的 @conn项可以省略,因为同级只有一个条件,无需关联
	array('e'=>'6,7,8', '@exp'=>'IN'),
	'@exp'=>'=',//此行可以省略
	'@conn' => 'AND',//此行可以省略
);
构造的查询语句为:
WHERE `a` = 1 AND `b` = 2 AND (`c1` > 3 OR `c2` > 4) AND (`d` != 5) AND (`e` IN (6,7,8))
嵌套条件可以无限嵌套下去,但为了阅读方便,建议您嵌套最多不超过2级。
关键词:构造查询条件 MYSQL PDO 构造查询语句 参数绑定 模糊查询 复杂SQL嵌套
阅读:566 | 发布时间:2018-12-30 10:57