yii2.0.50数据库配置需启用pdo_mysql扩展、dsn格式正确、charset设为utf8mb4以支持emoji,单库配db组件,多库需注册dbslave等独立组件并显式调用。

在Yii2.0.50中正确配置数据库连接是项目启动和数据操作的前提,必须确保PDO扩展已启用、DSN格式准确、字符集支持emoji且连接组件被正确注册到应用配置中,否则模型查询会直接抛出异常或返回空结果。
基础单库连接配置
打开 config/web.php 文件,在 components 数组内添加或修改 db 组件:
① 将以下配置块粘贴到 'components' => [ 内部(注意缩进对齐):
'db' => [<br> 'class' => 'yii\db\Connection',<br> 'dsn' => 'mysql:host=localhost;dbname=yii2_advanced',<br> 'username' => 'root',<br> 'password' => '123456',<br> 'charset' => 'utf8mb4',<br> 'tablePrefix' => 'tbl_',<br> 'enableSchemaCache' => true,<br> 'schemaCache' => 'cache',<br>],
② 【charset必须设为utf8mb4】 否则存储emoji或四字节UTF-8字符时会截断或报错;若用utf8将无法兼容微信昵称、颜文字等真实业务数据。
③ 确保PHP已启用 pdo_mysql 扩展——Windows下检查php.ini中 extension=php_pdo_mysql.dll 是否取消注释;Linux下运行 php -m | grep pdo_mysql 验证。
多数据库连接配置
当项目需同时读写主从库、分库分表或对接第三方业务库时,需注册多个独立连接组件:
方法一:在 config/web.php 的 components 中并列定义:
'db' => [ /* 主库读写 */ ],<br>'dbSlave' => [ /* 从库只读 */<br> 'class' => 'yii\db\Connection',<br> 'dsn' => 'mysql:host=192.168.1.100;dbname=yii2_slave',<br> 'username' => 'readonly_user',<br> 'password' => 'ro_pass',<br> 'charset' => 'utf8mb4',<br> 'slaveConfig' => ['attributes' => [\PDO::ATTR_PERSISTENT => false]],<br>],
方法二:抽离为独立配置文件(推荐用于复杂项目):
新建 config/db.php,内容为:
<?php return [<br> 'db' => [...],<br> 'db2' => [...],<br> 'db3' => [...],<br>];
然后在 config/web.php 中引入:
'db1' => require __DIR__ . '/db.php')['db'],<br>'db2' => require __DIR__ . '/db.php')['db2'],
这一步必须手动拆解数组键值,不能直接写 require 'db.php' ——否则所有连接会被合并进同一个组件名下,导致覆盖。
连接验证与调试
在任意控制器 action 中插入以下代码测试连接是否生效:
try {<br> Yii::$app->db->open();<br> echo "✅ 主库连接成功";<br>} catch (\Exception $e) {<br> die("❌ 主库连接失败:" . $e->getMessage());<br>}
若使用从库,替换为 Yii::$app->dbSlave->open() 即可验证。
注意:该测试必须在 应用完成初始化后执行,即不能放在入口脚本 index.php 顶部,否则 Yii::$app 尚未实例化会报 Fatal Error。
执行迁移命令验证配置是否被识别:php yii migrate —— 若提示 “No new migrations found” 或列出待执行列表,说明 db 组件已加载成功。











