如何在YII中更改数据库连接

siotufzp  于 2022-11-09  发布在  其他
关注(0)|答案(3)|浏览(170)

我有Yii应用程序,,我想改变数据库连接。首先,我的应用程序是连接到'trackstar'数据库,后来我想改变到'taskmanagement'数据库。
因此,我只需更改代码中的dbname:

<?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语句:状态[42S02]:找不到基表或视图:1146 1146表格'trackstar.tbl_auth_assignment'不存在。执行的SQL陈述式为:SELECT * FROM tbl_auth_assignment WHERE用户标识=:用户标识
我不明白的是为什么即使我只是将dbname更改为taskmanagement,它仍然连接到trackstar数据库
谢谢之前:)

6rvt4ljy

6rvt4ljy1#

我猜您模型中有一个查询被写成了直接SQL查询
例如:

SELECT * FROM databaseName.tableName

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

uemypmqf

uemypmqf2#

您只配置了console.php配置。但是Yii Web应用程序使用了main.php
检查您的main.php文件
它位于您的应用程序文件夹-〉受保护-〉配置-〉main.php
更改此文件的数据库连接

cbeh67ev

cbeh67ev3#

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

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";

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

相关问题