它允许用户实现类似于SQL查询语言的查询语言。 PHQL被实现为连接到RDBMS的解??析器。 Phalcon解析器使用与SQLite相同的技术。
PHQL包含以下功能:
- 它使用绑定参数保护代码。
- 它通过在每个调用中执行一条SQL语句来防止注入。
- 它忽略所有大多数在SQL注入中使用的注释。
- 它仅允许执行数据操作语句。
- 解析PHQL, 并将其转换为中间表示(IR)。 IR与数据库系统的SQL实现无关。
- 根据数据库系统将IR转换为有效的SQL。
- PHQL语句被解析一次并缓存在内存中。相同语句的进一步执行将导致执行速度稍快。
前端
首先, 我们创建一个接受输入的前端。
我们有2个模型手机和品牌:
<
?phpuse Phalcon\Mvc\Model;
class Mobile extends Model{public $id;
public $name;
public $brand_id;
public $price;
public $year;
/*** This model is mapped to the table sample_mobile*/public function getSource(){return 'sample_mobile';
}/*** A mobile only has a Brand, but a Brand have many mobile*/public function initialize(){$this->
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下创建。
<
?phpuse Phalcon\Mvc\Model\Query;
// Instantiate the Query$query = new Query('SELECT * FROM Mobile', $this->
getID());
// Execute the query returning a result if any$mobile = $query->
execute();
执行PHQL查询
它是从控制器或视图下的Phalcon \ Mvc \ Model \ Manager下执行的。
<
?php// Executing a simple query$query = $this->
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)。
<
?php// Executing a simple query$query = $this->
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查询语言(PHQL)】如果我们一次访问完整的对象和标量, 则返回复杂结果(Phalcon \ Mvc \ Model \ Resultset \ Complex)。
<
?php$phql = 'SELECT m.price*0.16 AS taxes, m.* FROM Mobiles AS m ORDER BY m.name';
$result = $manager->
executeQuery($phql);
foreach ($result as $row) {echo 'Name: ', $row->
Mobiles->
name, "\n";
echo 'Price: ', $row->
Mobiles ->
price, "\n";
echo 'Taxes: ', $row->
taxes, "\n";
}
推荐阅读
- Phalcon HTTP请求环境
- 环境部署(Phalcon安装详细步骤)
- Phalcon安全哈希
- Phalcon模型事务
- Phalcon模型
- Phalcon模型行为
- Phalcon模型事件
- Phalcon国际化
- Phalcon日志