【问题标题】:CodeIgniter manual database connection problem - usageCodeIgniter手动数据库连接问题-用法
【发布时间】:2011-07-25 18:56:11
【问题描述】:

我在一个困难的地方和一个有 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

【问题讨论】:

    标签: database codeigniter connection manual


    【解决方案1】:

    在上面的上下文中,$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.
    

    【讨论】:

    • 您好!感谢您的帮助,但我仍然很迷茫,无法完成这项工作。我将代码更改如下: /views/login/login.php 添加了用于输入用户名和密码的相应输入。这是发送帖子信息好的。 /controllers/login.php 类登录扩展 CI_Controller { public function __construct() { parent::__construct(); $this->output->enable_profiler(TRUE); }
    • 请忽略上一个请求...这是正确的评论:您好...我使用了您的建议,但无法使其发挥作用。一旦我将对象加载到会话变量中,模型就不会读取它。 print_r() 输出的一部分...=> [DB] => CI_DB_oci8_driver 对象但 $this->load->database($_SESSION['DB'], TRUE); $query = $this->$_SESSION['DB']->query('ALTER SESSION SET nls_sort = \'SPANISH\'');在模型中给出了错误。有什么线索???非常感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-04
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-27
    相关资源
    最近更新 更多