CodeIgniter手动数据库连接问题 - 用法

时间:2011-07-25 18:56:11

标签: database codeigniter connection manual

我介于一个困难的地方和一个有CI问题的摇滚之间。我必须使用用户键入的用户名和密码动态连接到数据库。这些是他们的oracle用户名和密码。因此,有了这些信息,我必须连接到数据库,然后对应用程序中的不同模型和控制器保持同意。

我有登录控制器和登录视图。我已经从database.php和config.php文件中禁用了数据库自动加载。

然后,login.php控制器如下所示:

class Login extends CI_Controller {

public function index()
{
    $this->output->enable_profiler(TRUE);

    if (isset($_POST['ingresar'])){

        $db['hostname'] = 'myhost';
        $db['username'] = $_POST['usr'];
        $db['password'] = $_POST['pwd'];

        $db['database'] = 'DBname';
        $db['dbdriver'] = 'oci8';
        $db['dbprefix'] = '';
        $db['pconnect'] = FALSE;
        $db['db_debug'] = FALSE;
        $db['cache_on'] = FALSE;
        $db['cachedir'] = '';
        $db['char_set'] = 'WE8ISO8859P1';
        $db['dbcollat'] = '';
        $db['swap_pre'] = '';
        $db['autoinit'] = TRUE;
        $db['stricton'] = FALSE;



        $db['DB'] = $this->load->database($_SESSION, TRUE);

        redirect('contactos', 'location');
    }
    else{
        $this->load->view('/componentes/header');
        $this->load->view('/componentes/menu_sin_login');
        $this->load->view('/login/login');
        $this->load->view('/componentes/footer');
    }       
}

当控制器重定向到另一个控制器“contactos”时,一切都会崩溃,因为在尝试加载模型时,它在第5行无法识别数据库连接。

class Contactos extends CI_Controller {
public function __construct()
{
    parent::__construct();
    $this->load->model('Contactos_model');
    $this->load->model('Componentes_model');.....

非常感谢您提供的任何帮助。

此致 V

1 个答案:

答案 0 :(得分:0)

在上面的上下文中,$db是一个局部变量,这意味着它并没有真正对脚本的更广泛的上下文做任何事情,并且你不会将它存储在可以重复使用的任何地方。

要加载数据库,您可能需要调用:

// you may want to think about using an encrypted CI session instead?
$_SESSION['DB'] = $db;

然后,在contactos中,您需要:

class Contactos extends CI_Controller {
public function __construct()
{
    parent::__construct();
    $this->load->database( $_SESSION['DB'] );
    // continue as above.