我们可以在运行时连接到数据库,具体取决于codeigniter中的用户登录吗?

时间:2017-03-20 11:19:41

标签: php database codeigniter runtime

我正在研究项目,我希望在运行时根据用户登录连接到数据库。当我现在开始我的项目时,我想尝试代码点火器框架。但是在做了研究之后,我发现了很难说这是可能的。我有代码在标准的PHP中做同样的事情。但我想在采用这种方法之前尝试使用框架。 我有多个(2个数据库)连接的代码。

$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
$db['default']['password'] = '';
$db['default']['database'] = 'test1';
$db['default']['dbdriver'] = 'mysql';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;

//Another database connection.

$db['db2']['hostname'] = 'localhost';
$db['db2']['username'] = 'root';
$db['db2']['password'] = '';
$db['db2']['database'] = 'test2';
$db['db2']['dbdriver'] = 'mysql';
$db['db2']['dbprefix'] = '';
$db['db2']['pconnect'] = FALSE;
$db['db2']['db_debug'] = TRUE;
$db['db2']['cache_on'] = FALSE;
$db['db2']['cachedir'] = '';
$db['db2']['char_set'] = 'utf8';
$db['db2']['dbcollat'] = 'utf8_general_ci';
$db['db2']['swap_pre'] = '';
$db['db2']['autoinit'] = TRUE;
$db['db2']['stricton'] = FALSE;

6 个答案:

答案 0 :(得分:1)

来自文件
要手动连接到所需的数据库,您可以传递一组值:

$config['hostname'] = 'localhost';
$config['username'] = 'myusername';
$config['password'] = 'mypassword';
$config['database'] = 'mydatabase';
$config['dbdriver'] = 'mysqli';
$config['dbprefix'] = '';
$config['pconnect'] = FALSE;
$config['db_debug'] = TRUE;
$config['cache_on'] = FALSE;
$config['cachedir'] = '';
$config['char_set'] = 'utf8';
$config['dbcollat'] = 'utf8_general_ci';
$this->load->database($config);

答案 1 :(得分:0)

使用以下语句在run的{​​{1}}时间内选择数据库。

codeigniter

如果要关闭当前连接,请使用

$this->db->db_select('database2_name');

然后$this->db->close();//closes the current db connection 您需要的select

答案 2 :(得分:0)

https://www.codeigniter.com/user_guide/database/connecting.html

查看“#34;手动连接到数据库”部分"在哪里说

要从配置文件中选择特定组,您可以执行以下操作:

$this->load->database('group_name');

因此,登录后您可以手动调用数据库连接并执行查询。我希望这已经足够了。

答案 3 :(得分:0)

$ active_group变量允许您选择要激活的连接组。默认情况下,只有一个组('默认'组)。

import Foundation

class Foo { 
    // if raises any exception here below code wait for compilation until handle it.
}

import SomethingElse      // import when make sense with //MARK:  

extension Foo: SomethingElse { 

}

$ active_record变量可让您确定是否加载活动记录类。

答案 4 :(得分:0)

是的,您可以在codeigniter中在运行时连接数据库。 默认情况下,如果您没有指定数据库的名称,则它将采用默认数据库

$db['default']['hostname'] = 'localhost';

如果您指定了特定名称

$db['db2']['hostname'] = 'localhost';

喜欢这个$this->load->database('db2', TRUE);

我在我的一个项目中做了同样的事情,你可以创建一个表,(如果你想要动态),你可以根据用户登录来存储所有的数据库名称。

因此,当连接到模型中的数据库时,首先需要从使用用户登录创建的表中获取数据库名称,因为您可以执行类似这样的操作

这里$ dbname是您通过查询默认数据库找到的数据库名称。

 $admin_db= $this->load->database($dbname, TRUE);
 $q = $admin_db->get('Tablename');

答案 5 :(得分:0)

@Pratima根据您对Yahia Bat的评论,您希望从某个表动态获取数据库的详细信息,然后连接到数据库。为此,您应该使用数据库中所需的详细信息填充$ config或任何其他数组,并进行相应的连接。

$config['hostname'] = '<<value from database table>>';
$config['username'] = '<<value from database table>>';
$config['password'] = '<<value from database table>>';
$config['database'] = '<<value from database table>>';
$config['dbdriver'] = 'mysqli';
$config['dbprefix'] = '';
$config['pconnect'] = FALSE;
$config['db_debug'] = TRUE;
$config['cache_on'] = FALSE;
$config['cachedir'] = '';
$config['char_set'] = 'utf8';
$config['dbcollat'] = 'utf8_general_ci';
$this->load->database($config);

应该解决的问题