# 数据库
Nette 框架提供了一个强大的访问数据库的层。
* 轻松SQL查询
* 轻松获取数据
* 高效的查询并且不发送不必要的数据
Nette\Database\Connection类是使用PDO连接到数据库类。 核心功能由Nette\Database\Context提供。 Nette\Database\Table层为表查询提供了增强层。
## 创建连接
要创建新的数据库连接,只需创建一个新的Nette\Database\Connection类实例
~~~
use Nette\Database\Connection;
$connection = new Connection($dsn, $user, $password);
~~~
Nette\Database将基于您的数据库服务器创建自己合适的内部驱动程序。 此内部驱动程序调整数据库服务器的Nette\Database行为。 Nette支持此数据库服务器:
![](https://box.kancloud.cn/0c3540ece39ac0bf90c6494fae290c1b_633x292.png)
连接构造函数的第4个可选参数允许您指定一些选项。 这些选项传递给PDO构造函数和内部驱动程序构造函数,因此它们可以包含PDO实例和驱动程序实例的配置。
如果希望在创建Connection实例后立即创建与数据库服务器的连接,但仅在使用数据库时创建,则可以将配置设置为“lazy”=> TRUE。
内部驱动程序类名称由提供的DSN检测。 但是,您可以提供自己实现的内部驱动程序。 为此,请使用driverClass键作为选项传递驱动程序名称。
~~~
$connection = new Connection($dsn, $user, $password, [
'lazy' => FALSE,
'driverClass' => 'App\YourSpecificDriverImplementationName'
]);
~~~
创建连接的最简单的方法是在应用程序配置中配置一个连接,这允许创建多个连接,并帮助您将数据库面板添加到Tracy调试栏。我们就记这个就行了,上面只是了解一下。发现官网教程很多都不直接说重点。
~~~
database:
default:
dsn: "mysql:host=127.0.0.1;dbname=test"
user: "root"
password: "password"
options: [PDO::MYSQL_ATTR_COMPRESS = true]
debugger: true # 调试器栏面板
explain: true #在调试器栏中解释查询
conventions: discovered # 或静态或类的名称,默认被发现
autowired: true
anotherConnection:
dsn: ...
autowired: false
~~~
反正记得设置数据库连接就从下图着手。其它都不是重要的。
![](https://box.kancloud.cn/9d22b02ec41e47343890f9de37371631_845x508.png)
## Queries(查询)
查询核心功能由Nette\Database\Context提供。 Database \ Context允许您通过调用查询方法轻松查询数据库:
~~~
use Nette\Database\Context;
$database = new Context($connection);
$database->query('INSERT INTO users', [ // 一个数组可以是一个参数
'name' => 'Jim',
'created' => new DateTime, //或一个DateTime对象
'avatar' => fopen('image.gif', 'r'), // 或一个文件对象
], ...); // 甚至可以使用多个插入件
$database->query('UPDATE users SET ? WHERE id=?', $data, $id);
$database->query('SELECT * FROM categories WHERE id=?', 123)->dump();
~~~
- Nette简介
- 快速开始
- 入门
- 主页
- 显示文章详细页
- 文章评论
- 创建和编辑帖子
- 权限验证
- 程序员指南
- MVC应用程序和控制器
- URL路由
- Tracy - PHP调试器
- 调试器扩展
- 增强PHP语言
- HTTP请求和响应
- 数据库
- 数据库:ActiveRow
- 数据库和表
- Sessions
- 用户授权和权限
- 配置
- 依赖注入
- 获取依赖关系
- DI容器扩展
- 组件
- 字符串处理
- 数组处理
- HTML元素
- 使用URL
- 表单
- 验证器
- 模板
- AJAX & Snippets
- 发送电子邮件
- 图像操作
- 缓存
- 本土化
- Nette Tester - 单元测试
- 与Travis CI的持续集成
- 分页
- 自动加载
- 文件搜索:Finder
- 原子操作