链式风格语法
除了简洁查询语法外, cp还提供了更灵活的链式查询语法, 链式查询的语法与原生SQL的写法顺序一致
select()
每一个链式查询总是以select()
开始, 首先传入要获取的字段
$this->link->select('*)
insert()
链式风格插入数据
$this->link->insert()
replace()
replace
$this->link->replace()
>只有以上三个方法可开始一个链式风格的数据库操作
from()
要查询的表
->from($table)
where()
查询条件
->where(array('id' => 1))
groupBy()
使用分组
->groupBy(1)
orderBy()
排序
->orderBy(1)
limit()
限制返回条数
->limit(1)
stmt()
执行参数绑定, 返回一个PDOStatement对象
->stmt()
这时接收两个参数
- bool $execute 是否调用stmt的execute
- array $prepare_params prepare时的参数
fetchAll()
调用PDOStatement的fetchAll()方法获取数据
->fetchAll(\PDO::FETCH_ASSOC);
至此链式查询的完整语句如下:
$this->link->select('*')
->from($table)
->where(array('id' => 1))
->groupBy(1)
->orderBy(1)
->limit(1)
->stmt()
->fetchAll(\PDO::FETCH_ASSOC);
每一个查询都以select
开头, 按照原生SQL语法的顺序依次写完, 然后调用stmt
执行参数绑定, 最后调用fetchAll
获取返回的数据.
PDOStatement::fetchAll()
的参数列表请查询PHP手册
>使用链式查询能更灵活的指定返回格式
获取生成的SQL和参数
链式写法可以很放方便的截取生成SQL语句和参数
$this->link->select('*')
->from($table)
->where(array('id' => 1))
->groupBy(1)
->orderBy(1)
->limit(1)
->getSQL();
按顺序写完以后调用->getSQL()
, 就可以获得生成的SQL语句和参数:
Array
(
[sql] => SELECT * FROM table WHERE id = ? GROUP BY 1 ORDER BY 1 LIMIT 1
[params] => Array
(
[0] => 1
)
)