Yii2创建数据库连接

3

我希望能够通过编程的方式创建数据库连接而不使用配置文件。我有一个表单,用户可以输入数据库的详情,比如 hostname, username, password, 以及 database name。根据这些信息,我们可以尝试建立一个新的测试连接,如果成功,就应该生成必要的文件。

以下是我尝试过的方法:

// Create Test DB Connection
Yii::$app->set('id', [
                    'class'    => 'yii\db\Connection',
                    'dsn'      => $dsn,
                    'username' => $form->username,
                    'password' => $form->password,
                    'charset'  => 'utf8'
                ]);
try {
    // Check DB Connection
    if (Yii::$app->db->getIsActive()) {
       // Write Config
        $config['components']['db']['class']    = 'yii\db\Connection';
        $config['components']['db']['dsn']      = $dsn;
        $config['components']['db']['username'] = $username;
        $config['components']['db']['password'] = $password;
        $config['components']['db']['charset']  = 'utf8';

        Configuration::setConfig($config);
        $success = TRUE;
        return $this->redirect(['init']);
    }else{
        $errorMsg = 'Incorrect Configurations';
    }
} catch (Exception $e) {
        $errorMsg = $e->getMessage();
}

我已经反复测试过了,即使配置正确,它仍然会出现错误。 非常感谢您的帮助。提前致谢!
2个回答

5
您可以这样定义新连接:
   $db = new yii\db\Connection([
   'dsn' => 'mysql:host=localhost;dbname=example',
   'username' => 'root',
   'password' => '',
   'charset' => 'utf8',
]); 

$db->open();

在建立数据库连接后,可以执行以下类似的SQL语句:

 $command = $db->createCommand('SELECT * FROM post');
 $posts = $command->queryAll();

 // or 

 $command = $connection->createCommand('UPDATE post SET status=1');
 $command->execute();

您可以查看此文档和指南

http://www.yiiframework.com/doc-2.0/guide-db-dao.html

http://www.yiiframework.com/doc-2.0/yii-db-connection.html


2

我意识到了我的错误。在使用Yii::$app->set()来设置db连接时,你甚至需要手动使用Yii::$app->db->open()来打开连接。Yii不会为你打开连接。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接