phalcon mysql port_Phalcon数据库抽象层

Phalcon 的数据库抽象层 PhalconDb 支持多种数据库引擎,包括 Mysql、Postgresql 和 Sqlite。它允许底层数据库操作,提供 PDO 连接,并通过适配器、方言和工厂类来封装特定的数据库操作。文章详细介绍了如何连接数据库、创建自定义适配器和方言、执行查询、参数绑定、事务处理以及数据库事件监听。同时,还涵盖了表的创建、编辑和删除操作。
摘要由CSDN通过智能技术生成

数据库抽象层(Database Abstraction Layer)

Phalcon\Db是Phalcon\Mvc\Model底层组件,由它驱动框架中的模型层。它完全由C语言编写,是一个独立的数据库高级抽象层。

与传统模型相比,该组件允许更底层的数据库操作。

数据库适配器(Database Adapters)

该组件使用适配器来封装特定的数据库操作。Phalcon使用PDO连接数据库,支持下列数据库引擎:

说明

Phalcon\Db\Adapter\Pdo\Mysql

世界上最流行的关系型数据库系统(RDBMS),作为服务器运行,支持多用户、多数据库访问

Phalcon\Db\Adapter\Pdo\Postgresql

Postgresql是一个强大的开源关系数据库系统,超过15年的发展和通过验证的架构,为其赢得了正确、可靠、数据完整的良好声誉

Phalcon\Db\Adapter\Pdo\Sqlite

SQLite是一个实现自包含、无服务、零配置的事务型数据库

工厂类(Factory)

使用适配器选项加载PDO:

use Phalcon\Db\Adapter\Pdo\Factory;

$options = [

'host' => 'localhost',

'dbname' => 'blog',

'port' => 3306,

'username' => 'sigma',

'password' => 'secret',

'adapter' => 'mysql',

];

$db = Factory::load($options);

自定义适配器(Implementing your own adapters)

创建自定义数据库适配器或扩展现有适配器,必须实现Phalcon\Db\AdapterInterface接口。

数据库语言(Database Dialects)

phalcon语言封装了每个数据库的具体操作,为适配器提供通用方法和SQL生成器。

说明

Phalcon\Db\Dialect\Mysql

MySQL特定语言

Phalcon\Db\Dialect\Postgresql

Postgresql特定语言

Phalcon\Db\Dialect\Sqlite

SQLite特定语言

自定义语言(Implementing your own dialects)

创建自定义数据库语言或扩展现有语言,必须实现Phalcon\Db\DialectInterface接口。

连接数据库(Connection to Databases)

建立数据库连接,必须实例化适配器类,它只接收一个包含连接参数的数组。下面例子展示了如何传递必选参数和可选参数来建立数据库连接:

// 必选参数

$config = [

'host' => '127.0.0.1',

'username' => 'mike',

'password' => 'sigma',

'dbname' => 'test_db',

];

// 可选参数

$config['persistent'] = false;

// 建立连接

$connection = new \Phalcon\Db\Adapter\Pdo\Mysql($config);

// 必选参数

$config = [

'host' => 'localhost',

'username' => 'postgres',

'password' => 'secret1',

'dbname' => 'template',

];

// 可选参数

$config['schema'] = 'public';

// 建立连接

$connection = new \Phalcon\Db\Adapter\Pdo\Postgresql($config);

设置额外的PDO选项(Setting up additional PDO options)

在建立连接时,传递options参数设置PDO:

// 使用PDO选项建立连接

$connection = new \Phalcon\Db\Adapter\Pdo\Mysql(

[

'host' => 'localhost',

'username' => 'root',

'password' => 'sigma',

'dbname' => 'test_db',

'options' => [

PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8',

PDO::ATTR_CASE => PDO::CASE_LOWER,

],

]

);

使用工厂类连接数据库(Connecting using Factory)

使用一个简单的ini文件来配置 / 连接数据库。

[database]

host = TEST_DB_MYSQL_HOST

username = TEST_DB_MYSQL_USER

password = TEST_DB_MYSQL_PASSWD

dbname = TEST_DB_MYSQL_NAME

port = TEST_DB_MYSQL_PORT

charset = TEST_DB_MYSQL_CHARSET

adapter = mysql

use Phalcon\Config\Adapter\Ini;

use Phalcon\Db\Adapter\Pdo\Factory;

use Phalcon\Di;

$di = new Di();

$config = new Ini('config.ini');

$di->set('config', $config);

$di->set(

'db',

function () {

return Factory::load($this->config->database);

}

);

上述代码返回数据库连接实例,这样做的好处是可以在不修改应用代码的情况下改变数据库连接甚至是数据库适配器。

查询记录(Finding Rows)

Phalcon\Db提供了多种查询方法。这种情况下,SQL必须遵循数据库引擎的特定语法:

$sql = "SELECT id, name FROM robots ORDER BY name";

// 发送SQL语句到数据库

$result = $connection->query($sql);

// 打印robot的name字段

while ($robot = $result->fetch()) {

echo $robot['name'];

}

// 获取结果集数组

$robots = $connection->fetchAll($sql);

foreach ($robots as $robot) {

echo $robot['name'];

}

// 获取结果集中的第一条记录

$robot = $connection->fetchOne($sql);

默认情况下,调用这些方法会返回一个数组(关联+索引)。可以调用Phalcon\Db\Result::setFetchMode()方法改变这种行为,该方法接收一个常量值,定义返回结果集的类型:

常量

说明

Phalcon\Db::FETCH_NUM

返回索引数组

Phalcon\Db::FETCH_ASSOC

返回关联数组

Phalcon\Db::FETCH_BOTH

返回数组(索引+关联)

Phalcon\Db::FETCH_OBJ

返回对象

$sql = "SELECT id, name FROM robots ORDER BY name";

$result = $connection->query($sql);

$result->setFetchMode(Phalcon\Db::FETCH_NUM);

while ($robot = $result->fetch()) {

echo $robot[0];

}

Phalcon\Db::query()方法返回一个Phalcon\Db\Result\Pdo实例。该对象封装了与返回结果集相关的所有功能,如遍历、查找特定行、统计总行数等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值