- Phalcon 教程
- Phalcon - 首页
- Phalcon - 概览
- Phalcon - 环境搭建
- Phalcon - 应用结构
- Phalcon - 功能
- Phalcon - 配置
- Phalcon - 控制器
- Phalcon - 模型
- Phalcon - 视图
- Phalcon - 路由
- Phalcon - 数据库连接
- Phalcon - 切换数据库
- Phalcon - 脚手架应用
- Phalcon - 查询语言
- Phalcon - 数据库迁移
- Phalcon - Cookie 管理
- Phalcon - Session 管理
- Phalcon - 多语言支持
- Phalcon - 资源管理
- Phalcon - 表单操作
- Phalcon - 对象文档映射器
- Phalcon - 安全特性
- Phalcon 有用资源
- Phalcon - 快速指南
- Phalcon - 有用资源
- Phalcon - 讨论
Phalcon - 查询语言
Phalcon 查询语言 (PHQL),也称为PhalconQL,是一种高级 SQL 方言,它标准化了 Phalcon 支持的数据库系统的 SQL 查询。
它包含一个用 C 编写的解析器,用于将语法转换为目标 RDBMS。
以下是 Phalcon 查询语言的一些主要功能列表:
为了 Web 应用的安全,它使用绑定参数。
表被视为模型,而列被视为类属性。
所有数据操作语句都用于防止可能发生的数据丢失。
通过一次保持一个 SQL 查询调用来防止 SQL 注入。
创建 PHQL 查询
通过实例化类Phalcon\Mvc\Model\Query来创建查询。
示例
// Instantiate the Query $query = new Query( "SELECT * FROM Users", $this->getDI() ); // Execute the query returning a result if any $cars = $query->execute();
在前面的章节中,我们已经看到了名为博客教程的脚手架 Web 应用的工作原理。它包括根据名称或 slug 搜索类别。
以下是 searchAction 中包含的代码。
public function searchAction() {
$numberPage = 1;
if ($this->request->isPost()) {
$query = Criteria::fromInput($this->di, "Categories", $_POST);
$this->session->conditions = $query->getConditions();
} else {
$numberPage = $this->request->getQuery("page", "int");
if ($numberPage <= 0) {
$numberPage = 1;
}
}
$parameters = array();
if ($this->session->conditions) {
$parameters["conditions"] = $this->session->conditions;
}
// $parameters["order"] = "id";
$categories = Categories::find($parameters);
if (count($categories) == 0) {
$this->flash->notice("The search did not find any categories");
return $this->dispatcher->forward(array(
"controller" => "categories",
"action" => "index"
));
}
$paginator = new \Phalcon\Paginator\Adapter\Model(array(
"data" => $categories,
"limit"=> 10,
"page" => $numberPage
));
$page = $paginator->getPaginate();
$this->view->setVar("page", $page);
}
控制器中执行的 PHQL 查询(已突出显示)将根据搜索条件获取所有结果。任何根据条件的搜索查询的结果都将如屏幕截图所示显示。
以下是上述代码成功执行后收到的输出。
PHQL 生命周期
作为一种高级语言,PHQL 使开发人员能够根据需求个性化和定制各个方面。
以下是每个在 Phalcon 中执行的 PHQL 语句的生命周期:
每个 PHQL 语句都被解析并转换为中间表示 (IR),它完全独立于数据库系统实现的 SQL。
IR 会根据 Web 应用中使用的数据库系统转换为 SQL 语句。生成的 SQL 语句与模型相关联。
所有 PHQL 语句都会被解析一次并缓存在内存中。如果执行相同的语句结果,它将有助于提高性能。
广告