📜  Phalcon-查询语言

📅  最后修改于: 2020-10-21 05:29:12             🧑  作者: Mango


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应用程序的工作。它包括按名称或子词搜索类别。

以下是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语句均被解析一次并缓存在内存中。如果执行相同的语句结果,将有助于提高性能。

生命周期