首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP :运行时的数据库连接

问PHP :运行时的数据库连接
EN

Stack Overflow用户
提问于 2013-10-17 13:50:20
回答 3查看 2.8K关注 0票数 3

我想在运行时用Yii连接到第二个数据库。数据库名称将来自用户登录后的数据库表。

我在一个教程中看到我应该这样做:

代码语言:javascript
复制
$db2 = Yii::createComponent(array(
    'class' => 'EMongoClient',
    'server' => 'mongodb://127.0.0.1:27017',
    'db' => $emp['database']
));

Yii::app()->setComponent('db2',$db2);

但是在我的控制器中,当我访问Yii::app()->db2时,得到错误:

属性"CWebApplication.db2“未定义

我做错了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-12-04 05:19:48

以下几点对我来说是可行的:

代码语言:javascript
复制
Yii::app()->mongodb->setActive(false);
Yii::app()->mongodb->setServer('mongodb://localhost:27017');
Yii::app()->mongodb->setDb('db1');
Yii::app()->mongodb->setActive(true);
票数 3
EN

Stack Overflow用户

发布于 2013-10-17 13:54:54

更新:尝试,例如,传递配置:

Yii::app()->setComponent( 'db2',数组( 'class‘=> 'EMongoClient',’服务器‘=> 'mongodb://127.0.0.1:27017’),‘'db’=> $emp‘数据库’);

或者,您可以在配置中在params上创建特殊索引,例如:

..。‘'params’=>数组( 'db2‘=> null,),

以及Yii::app()->params['db2'] = $db2的使用

票数 1
EN

Stack Overflow用户

发布于 2013-10-18 02:09:51

从这一评论中:

我的问题不是创建组件。创建后不久,如果我访问Yii::app(),->db2它的工作,但当我试图通过另一个模型或控制器访问时,我会得到错误

我认为您只在某个地方设置了该组件一次,然后向不同的控制器发出后续请求。

您需要将代码,每次都被调用的某个地方,放在每个请求上。这就是PHP的工作方式,没有“全局应用程序状态”。

默认情况下,Yii附带了protected/components/controller.php,它为应用程序的其余部分提供了基本控制器。

我的建议是将代码放在控制器的init()方法上,以便始终调用它。

您提到,一旦用户登录,数据库名称来自一个表,因此您需要在会话中保存该值,以便能够在其他请求中访问该值:

代码语言:javascript
复制
<?php

// After login in
Yii::app()->user->setState('db_name', $db_name);

// in protected/components/controller.php
public function init()
{
    if (!Yii::app()->user->isGuest) {
        $db2 = Yii::createComponent(array(
            'class' => 'EMongoClient',
            'server' => 'mongodb://127.0.0.1:27017',
            'db' => Yii::app()->user->getState('db_name')
        ));

        Yii::app()->setComponent('db2',$db2);
    }
}

希望它能有所帮助,我在这里假设了很多事情:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19428597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档