📜  Phalcon PHQL

📅  最后修改于: 2021-01-07 09:27:18             🧑  作者: Mango

Phalcon查询语言(PHQL)

它允许用户实现类似于SQL查询语言的查询语言。 PHQL被实现为连接到RDBMS的解析器。 Phalcon解析器使用与SQLite相同的技术。

PHQL包含以下列出的功能:

  • 它使用绑定参数保护代码。
  • 它通过在每个调用中执行一条SQL语句来防止注入。
  • 它忽略所有大多数在SQL注入中使用的注释。
  • 它仅允许执行数据操作语句。

PHQL生命周期

PHQL使开发人员能够相应地进行个性化和自定义。以下是执行的PHQL语句的生命周期:

  • 将PHQL解析并转换为中间表示(IR)。 IR与数据库系统的SQL实现无关。
  • 根据数据库系统,IR转换为有效的SQL。
  • PHQL语句被解析一次并缓存在内存中。相同语句的进一步执行将导致执行速度稍快。

实作

前端

首先,我们创建一个接受输入的前端。

我们有2个模型手机和品牌:

belongsTo('brand_id', 'Brands', 'id');
    }
}

class Brands extends Model
{
    public $id;
    public $name;
    /**
     * The model Brands is mapped to the 'sample_brands' table
     */
    public function getSource()
    {
        return 'sample_brands';
    }


    /**
     * A Brand can have many Mobile
     */
    public function initialize()
    {
        $this->hasMany('id', 'Mobile', 'brand_id');
    }

创建PHQL查询

它在目录Phalcon \ Mvc \ Model \ Query下创建。

getID()
);
// Execute the query returning a result if any
$mobile = $query->execute();

执行PHQL查询

从控制器或视图下的目录Phalcon \ Mvc \ Model \ Manager执行。

modelsManager->createQuery('SELECT * FROM Mobile');
$mobile = $query->execute();
// With bound parameters
$query = $this->modelsManager->createQuery('SELECT * FROM Mobile WHERE name = :name:');
$mobile = $query->execute(
    [
        'name' => 'Sony',
    ]
);

输出:

结果类型

结果类型根据查询的列类型分为简单和复杂两种。

如果我们检索单个对象,则对象返回为简单结果(Phalcon \ Mvc \ Model \ Resultset \ Simple)

modelsManager->createQuery('SELECT * FROM Mobiles);
$mobiles= $query->execute();
// With bound parameters
$query = $this->modelsManager->createQuery('SELECT * FROM Mobiles WHERE name = :name:');
$mobiles  = $query->execute(
    [
        'name' => ?Sony',
    ]
);

如果我们一次访问完整的对象和标量,则返回复杂结果(Phalcon \ Mvc \ Model \ Resultset \ Complex)。

executeQuery($phql);
foreach ($result as $row) {
    echo 'Name: ', $row->Mobiles->name, "\n";
    echo 'Price: ', $row-> Mobiles ->price, "\n";
    echo 'Taxes: ', $row->taxes, "\n";
}