条件生成
CP中的where可以生成各种复杂SQL片段. 简洁查询语法, 链式查询语法和增删改通用
直接使用字符串
where参数可以直接使用字符串
$this->link->get($table, '*', 'score=1')
此时生成的语句为:
SELECT * FROM user WHERE score=1 LIMIT 1
仅当条件是一个字符串常量的时候(字符串中不带PHP变量), 才能使用字符串传参
仅当条件是一个字符串常量的时候(字符串中不带PHP变量), 才能使用字符串传参
仅当条件是一个字符串常量的时候(字符串中不带PHP变量), 才能使用字符串传参
重要的事情说三遍, 如果where参数的字符串中有PHP变量会有注入风险
重要的事情说三遍, 如果where参数的字符串中有PHP变量会有注入风险
重要的事情说三遍, 如果where参数的字符串中有PHP变量会有注入风险
各种比较操作符
使用 >, <, >=, <=, <>
array(
'score' => array('>', 1)
);
score大于1的数据, 类似的操作还可以使用>
, <>
等。
LIKE
like查询
array(
'name' => array('like', '%john')
);
IN
生成IN
查询
array(
'id' => array('in', array(1,2,3))
);
对应的查询条件SQL片段为 id IN (?,?,?)
OR
生成OR
查询条件
array(
'id' => array('or', array(1, 2, 3))
);
对应的条件片段为: id = ? OR id = ? OR id = ?
BETWEEN
BETWEEN只接受两个值
array(
'id' => array('between', array(1, 2))
);
生成的查询条件SQL片段为:
BETWEEN 1 AND 2
子条件
生成某一条件的子条件
array(
'id' => array('or', array(1, 2, 3, array('>', 5) ))
);
此时生成的查询条件SQL片段为
`id = ? OR id = ? OR id = ? OR id > ?`
生成组合查询条件
复杂条件下的组合查询
array(
'id' => array('in', array(7, 2, 3)),
'pid' => array('or', array(1, 2 => array('>', 2)))
));
生成的查询条件SQL片段片段为
`id IN (?,?,?) AND pid = ? OR pid > ?`
复杂优先级
更复杂的组合条件可以在数组中的key中使用括号中直接使用SQL片段, 值跟括号中的?
对应
array(
'id' => array('in', array(7, 2, 3)),
'(pid = ? OR pid = ?)' => array(1, 2)
);
生成的查询条件SQL片段为
`id IN (?,?,?) AND (pid = ? OR pid = ?)`
- 手动指定条件
where是数组的另一种用法
array("a = ? and (b = ? or b = ?)", array(1, 2, 3));
此时, where是一个包含两个元素的数字索引数组, 数值索引数组的第一个值是SQL片段, 第二个值是对应?
的参数.
框架不用解析数组, 是所有写法中效率最高的一种