# mysql数据库配置

# 配置文件

common\config\db.php

# 配置说明

# 创建数据库连接

想要访问数据库,你首先需要通过创建一个 yii\db\Connection 实例来与之建立连接。

$db = new yii\db\Connection([
    'dsn' => 'mysql:host=localhost;dbname=example',
    'username' => 'root',
    'password' => '',
    'charset' => 'utf8',
]);

因为数据库连接经常需要在多个地方使用到, 一个常见的做法是以应用组件的方式来配置它,如下:

return [
    // ...
    'components' => [
        // ...
        'db' => [
            'class' => 'yii\db\Connection',
            'dsn' => 'mysql:host=localhost;dbname=example',
            'username' => 'root',
            'password' => '',
            'charset' => 'utf8',
        ],
    ],
    // ...
];

之后你就可以通过语句 Yii::$app->db 来使用数据库连接了。

提示: 如果你的应用需要访问多个数据库,你可以配置多个 DB 应用组件。

配置数据库连接时, 你应该总是通过 dsn 属性来指明它的数据源名称 (DSN) 。 不同的数据库有着不同的 DSN 格式。 请参考 PHP manual 来获得更多细节。下面是一些例子:

MySQL, MariaDB: mysql:host=localhost;dbname=mydatabase
SQLite: sqlite:/path/to/database/file
PostgreSQL: pgsql:host=localhost;port=5432;dbname=mydatabase
CUBRID: cubrid:dbname=demodb;host=localhost;port=33000
MS SQL Server (via sqlsrv driver): sqlsrv:Server=localhost;Database=mydatabase
MS SQL Server (via dblib driver): dblib:host=localhost;dbname=mydatabase
MS SQL Server (via mssql driver): mssql:host=localhost;dbname=mydatabase
Oracle: oci:dbname=//localhost:1521/mydatabase

请注意,如果你是通过 ODBC 来连接数据库,你应该配置 yii\db\Connection::$driverName 属性, 以便 Yii 能够知道实际的数据库种类。例如:

'db' => [
    'class' => 'yii\db\Connection',
    'driverName' => 'mysql',
    'dsn' => 'odbc:Driver={MySQL};Server=localhost;Database=test',
    'username' => 'root',
    'password' => '',
],

除了 dsn 属性, 你常常需要配置 username 和 password。请参考 yii\db\Connection 来获取完整的可配置属性列表。

信息: 当你实例化一个 DB Connection 时,直到你第一次执行 SQL 或者你明确地调用 open() 方法时, 才建立起实际的数据库连接。

提示: 有时你可能想要在建立起数据库连接时立即执行一些语句来初始化一些环境变量 (比如设置时区或者字符集), 你可以通过为数据库连接的 afterOpen 事件注册一个事件处理器来达到目的。 你可以像这样直接在应用配置中注册处理器:

'db' => [
    // ...
    'on afterOpen' => function($event) {
        // $event->sender refers to the DB connection
        $event->sender->createCommand("SET time_zone = 'UTC'")->execute();
    }
],
编辑当前页 (opens new window)