【问题标题】:Init a second database in codeigniter by a helper function通过辅助函数在 codeigniter 中初始化第二个数据库
【发布时间】:2019-04-28 04:34:41
【问题描述】:

在我的站点中有不同的模块,每个模块都有自己的数据表。

所以现在我不确定以最佳方式连接这些模块的最佳方式。

我的想法是创建一个辅助函数,用于测试数据库连接是否可用。如果没有,助手应该初始化数据库并使数据库在控制器和模型中可用。

在 Codeigniter 的文档中,我只找到了有关多个数据库设置的信息 - 我找不到使用某种动态帮助器的示例。

也许有人可以帮助我更进一步?

【问题讨论】:

  • 所以如果 DB1 不能访问 DB2,你想要吗?

标签: codeigniter


【解决方案1】:

您可以做的是设置您的 db_name、db_user 和 db_pass 的会话(如果每个 db_name 的 user 和 pass 不同)。为了重用动态数据库而不总是通过访问。

这是一个实现:

助手:

if (!function_exists('get_dynamic_db')){
    function get_dynamic_db()
    {
        $CI =& get_instance();
        $db = $CI->session->user_data('other_db');
        $user = $CI->session->user_data('other_db_user');
        $pass = $CI->session->user_data('other_db_pass');

        $config_app = array(
            'dsn'   => '',
            'hostname' => 'localhost',
            'username' => $user,
            'password' => $pass,
            'database' => $db,
            'dbdriver' => 'mysqli',
            'dbprefix' => '',
            'pconnect' => FALSE,
            'db_debug' => (ENVIRONMENT !== 'production'),
            'cache_on' => FALSE,
            'cachedir' => '',
            'char_set' => 'utf8',
            'dbcollat' => 'utf8_general_ci',
            'swap_pre' => '',
            'encrypt' => FALSE,
            'compress' => FALSE,
            'stricton' => FALSE,
            'failover' => array(),
            'save_queries' => TRUE
        );

        return $CI->load->database($config_app,TRUE);
    }
}

型号:

Class DD_model extends CI_Model {

    var $dynamic_db;

    public function __construct() {

        $this->load->database(); // default db
        $this->dynamic_db = get_dynamic_db(); // dynamic db
    }

    public function ping_server_db()
    {
        $this->dynamic_db->from('some_table');
        $query = $dynamic_db->get();

        return $query->row() ? true : false;
    }
}

控制器:

public function select_db($db_name)
{
    $this->session->set_userdata(array('other_db' => $db_name, 'other_db_user' => 'user', 'other_db_pass' => 'pass'));
    $dynamic_db = $this->DD_model->ping_server_db();

    if (!$dynamic_db) {

        $this->session->unset_userdata('other_db');
        return false;
    }
}

这样,您就可以在所有模型中使用get_dynamic_db(); 从动态数据库中查询

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-23
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    • 2020-01-30
    • 1970-01-01
    • 2012-01-07
    • 2010-11-24
    相关资源
    最近更新 更多