📅  最后修改于: 2020-10-21 05:29:12             🧑  作者: Mango
Phalcon查询语言(PHQL)也称为PhalconQL,是一种高级SQL方言,它标准化了Phalcon支持的数据库系统的SQL查询。
它包含一个用C编写的解析器,该解析器可转换目标RDBMS中的语法。
这是Phalcon查询语言的一些突出功能的列表-
为了确保Web应用程序的安全,它使用绑定的参数。
表被视为模型,而列被视为类属性。
所有数据操作语句均用于防止可能发生的数据丢失。
通过一次保持一次SQL查询调用来防止SQL注入。
通过实例化类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应用程序的工作。它包括按名称或子词搜索类别。
以下是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为开发人员提供了根据需求个性化和自定义各个方面的能力。
以下是在Phalcon中执行的每个PHQL语句的生命周期-
每个PHQL语句都作为中间表示(IR)进行解析和转换,该中间表示完全独立于数据库系统实现的SQL。
根据Web应用程序中使用的数据库系统,将IR转换为SQL语句。生成的SQL语句与模型关联。
所有PHQL语句均被解析一次并缓存在内存中。如果执行相同的语句结果,将有助于提高性能。