【问题标题】:How to prevent Yii from opening the database automatically如何防止 Yii 自动打开数据库
【发布时间】:2018-09-20 05:14:40
【问题描述】:

我的门户使用 Yii 1.1.17。我使用相同的应用程序根据域名连接到不同的数据库。 我在 main.php

中写了假参数
'db'=>array(
   'connectionString' => 'mysql:host=localhost;dbname=db',           
   'emulatePrepare' => TRUE,
   'active' => FALSE,
   'username' => 'dbUser',
   'password' => 'dbP@ssW0rd',
   'charset' => 'utf8'
),

然后在 Controller.php 中更改它们,如下所示:

// get database params from url
        $url = Yii::app()->request->serverName;
        $db_param = explode(".",$url);
        $db = Yii::app()->params['db'][$db_param[0]];
        Yii::app()->db->setActive(false);
        Yii::app()->db->connectionString = mysql:host=127.0.0.1;dbname=$db";
        Yii::app()->db->username = $db;
        Yii::app()->db->setActive(true);

usernamedbname 相同,password 对所有数据库都相同。 当我打开门户时,它给了我

 CDbException
 CDbConnection failed to open the DB connection.

但是当我在 main.php 内的 connectionStringusername 中写入实时数据库的实际值时,它会打开然后更改这些值并连接到正确的数据库。

我的问题是: 如何防止 Yii 在运行 Controller.php 中的代码之前自动连接。我设置了'active' => FALSE,但是没有用。

【问题讨论】:

标签: yii


【解决方案1】:

在你使用之前,Yii 不会初始化db 组件并打开数据库连接。因此,如果您的连接已打开,也许您实际上在控制器运行之前的某个地方使用了此组件(其他组件可能会使用它)?

但很可能您是在控制器中自己初始化它 - 访问 Yii::app()->db 将初始化 db 组件并打开数据库连接。您应该使用 setComponent() 覆盖它:

Yii::app()->setComponent('db', [
    'class' => 'CDbConnection',
    'connectionString' => 'mysql:host=localhost;dbname=db',
    'emulatePrepare' => true,
    'active' => false,
    'username' => 'dbUser',
    'password' => 'dbP@ssW0rd',
    'charset' => 'utf8',
]);

或者

Yii::app()->setComponent('db', Yii::createComponent([
    'class' => 'CDbConnection',
    'connectionString' => 'mysql:host=localhost;dbname=db',
    'emulatePrepare' => true,
    'active' => false,
    'username' => 'dbUser',
    'password' => 'dbP@ssW0rd',
    'charset' => 'utf8',
]));

【讨论】:

  • 也许当我在 Controller.php 中关闭它时,它会先打开 db。 Yii::app()->db->setActive(false);但是,推荐 Vitalijs G. 的方式有效
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-11
  • 2018-11-25
  • 1970-01-01
  • 2017-07-06
  • 2022-06-11
  • 2011-12-10
相关资源
最近更新 更多