ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 数据库 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(); ~~~