Проблема с подключением базы данных CodeIgniter вручную - использование - PullRequest
2 голосов
/ 25 июля 2011

Я нахожусь между трудным местом и камнем с проблемой КИ.Я должен динамически подключаться к БД с помощью имени пользователя и пароля, которые вводят пользователи.Это их имена и пароли оракула.Итак, с этой информацией я должен установить соединение с БД, а затем сохранить его для различных моделей и контроллеров в приложении.

У меня есть контроллер входа в систему и представление входа в систему.Я отключил автозагрузку базы данных из файлов 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 голосов
/ 25 июля 2011

В приведенном выше контексте $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.
...