Phalcon - 查询语言
Phalcon 查询语言 (PHQL) 也称为 PhalconQL,是一种高级 SQL 方言,它标准化了 Phalcon 支持的数据库系统的 SQL 查询。
它包含一个用 C 编写的解析器,用于转换目标 RDBMS 中的语法。
以下是 Phalcon 查询语言的一些主要功能列表 −
为了确保 Web 应用程序的安全,它使用绑定参数。
表被视为模型,而列被视为类属性。
所有数据操作语句均用于防止可能发生的数据丢失。
通过一次只调用一个 SQL 查询来防止 SQL 注入。
创建PHQL 查询
查询是通过实例化类 Phalcon\Mvc\Model\Query 创建的。
示例
// 实例化查询 $query = new Query( "SELECT * FROM Users", $this->getDI() ); // 执行查询并返回结果(如果有) $cars = $query->execute();
在前面的章节中,我们已经了解了名为 blog tutorial 的脚手架 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。
根据 Web 应用程序中使用的数据库系统,IR 转换为 SQL 语句。生成的SQL语句与模型相关联。
所有PHQL语句都解析一次并缓存在内存中。如果执行相同的语句结果,将有助于提高性能。