【问题标题】:How to change the database connection in YII如何在 YII 中更改数据库连接
【发布时间】:2014-05-02 00:36:40
【问题描述】:

我有 yii 应用程序,我想更改数据库连接.. 首先,我的应用程序连接到“trackstar”数据库,然后我想更改为“taskmanagement”数据库..

所以我只是简单地在我的代码中更改数据库名称:

    <?php

// This is the configuration for yiic console application.
// Any writable CConsoleApplication properties can be configured here.
return array(
    'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..',
    'name'=>'My Console Application',
    // application components
    'components'=>array(
         'db'=>array(
            'connectionString' => 'mysql:host=localhost;dbname=taskmanagement',
            'emulatePrepare' => true,
            'username' => 'root',
            'password' => '',
            'charset' => 'utf8',
        ),
        'authManager'=>array(
            'class'=>'CDbAuthManager',
            'connectionID'=>'db',
            'itemTable' => 'tbl_auth_item',
            'itemChildTable' => 'tbl_auth_item_child',
            'assignmentTable' => 'tbl_auth_assignment',
        ),
    ),
);

但是当我运行应用程序时出现错误:

CDbCommand 执行 SQL 语句失败:SQLSTATE[42S02]:Base 未找到表或视图:1146 表 'trackstar.tbl_auth_assignment' 不存在。执行的 SQL 语句是:SELECT * FROM tbl_auth_assignment WHERE userid=:userid

我不明白的是为什么仍然连接到trackstar 数据库,尽管我只是将数据库名称更改为taskmanagement

感谢之前:)

【问题讨论】:

    标签: php mysql yii


    【解决方案1】:

    我猜你的模型查询写成直接 SQL 查询。

    前:

     SELECT * FROM databaseName.tableName 
    

    因此,即使您在配置文件中更改数据库名称,这些类型的查询也可能不起作用。请以这种方式检查您的代码。

    【讨论】:

      【解决方案2】:

      您只是配置 console.php 配置。但是 Yii Web 应用程序使用 ma​​in.php

      检查您的 ma​​in.php 文件

      它位于 您的应用文件夹 -> 受保护 -> 配置 ->main.php

      更改此文件上的 Db 连接

      【讨论】:

        【解决方案3】:

        您可以使用以下代码动态更新数据库

                if ($city == 'ABC') {
                    $databse = 'db_abc';
                } elseif ($city == 'BCD') {
                    $databse = 'db_bcd';
                }   else {
                    $databse = 'default_db';
                }
                $db = Yii::$app->getDb();
                $db->dsn = "mysql:host=localhost;dbname=$databse";
        

        希望这有助于覆盖数据库连接字符串

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-10-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-11-20
          • 2010-11-04
          • 2017-12-26
          相关资源
          最近更新 更多