【问题标题】:How to get multiple database connections dynamically?如何动态获取多个数据库连接?
【发布时间】:2015-04-05 14:04:36
【问题描述】:

我需要 3 个与 Codeigniter 的数据库连接。我不知道有关这些数据库的主机、用户名或密码的任何信息。这意味着用户必须使用表单发送这些信息。

我所知道的是,它可以添加另一个数组,例如 $db['another_db'] 到 config/database.php,但是我将如何动态设置主机名、用户名和密码的值?

我尝试使用自己的类来执行此操作,但我并没有真正工作:

<?php
class Connection_model extends CI_Model {
    public function define_database($member, $host, $user, $pw, $database) {
        $db[$member] = array(
                'dsn'   => '',
                'hostname' => $host,
                'username' => $user,
                'password' => $pw,
                'database' => $database,
                'dbdriver' => 'mysqli',
                'dbprefix' => '',
                'pconnect' => FALSE,
                'db_debug' => TRUE,
                'cache_on' => FALSE,
                'cachedir' => '',
                'char_set' => 'utf8',
                'dbcollat' => 'utf8_general_ci',
                'swap_pre' => '',
                'autoinit' => TRUE,
                'encrypt' => FALSE,
                'compress' => FALSE,
                'stricton' => FALSE,
                'failover' => array(),
                'save_queries' => TRUE
        );
    }

    public function get_person($member, $host, $user, $pw) {
        $otherdb = $this->load->database($this->define_database($member, $host, $user, $pw, $database), TRUE);

        $query = $otherdb->select('first_name, last_name')->get('person');
        var_dump($query);
    }
}

我在我的控制器上这样使用它:

    $this->load->model('connection_model');
    $this->connection_model->get_person('sender', 'localhost', 'root', '', 'test');

我收到消息:未定义变量:数据库

我做错了什么?还是有其他方法可以获取另一个连接?

【问题讨论】:

    标签: php codeigniter database-connection


    【解决方案1】:

    看看你的 get_person 方法,它需要 4 个参数:

    public function get_person(**$member, $host, $user, $pw**) 
    

    但在其中你调用方法 define_database 传递 5 个参数:

    $this->define_database($member, $host, $user, $pw, **$database**)
    

    CI 给出错误,因为第五个参数未在此范围内定义。

    【讨论】:

    • 哦,多么愚蠢的错误。谢谢,我更改了它,但现在出现另一个错误:您尚未选择要连接的数据库类型。那么如何选择那个数据库呢?
    • 我认为问题出在这里: $otherdb = $this->load->database($this->define_database($member, $host, $user, $pw, $database), TRUE );您的 define_database 方法不返回任何内容,因此 load->database 采用 null 参数尝试编写:return $db[$member];在define_database方法结束时
    • 你是对的!我将 return $db[$member] 添加到我的 define_database 函数中,它现在可以工作了。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    相关资源
    最近更新 更多