如何使用不同的主机名、用户名和密码值动态连接mysql数据库

ubbxdtey  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(300)

我有一个公共数据库表,其中包含不同客户机的不同db名称。当我从查询中获得主机名、用户名和密码的值时,我需要动态连接这些数据库。我正在使用codeigniter和php7.2。请给我一些建议。提前谢谢。

mbyulnm0

mbyulnm01#

在ci中,你可以用两种方法来做。
从config/database.php
您可以调用default db来获取行,并使用动态键分配在循环中运行。根据需要,您可以调用该db凭据。
从模型或控制器。
$this->load->database(数组('hostname'=>'localhost','username'=>'root','password'=>'','database'=>'ci','dbdriver'=>'mysqli',);

lx0bsm1f

lx0bsm1f2#

您可以创建一个助手来加载动态数据库并在模型上调用它。
帮手:

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('user');
        $pass = $CI->session->user_data('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);
    }
}

样品型号:

var $dynamic_db;

public function __construct() {

    $this->load->database(); //ur regular DB -- $this->db
    $this->dynamic_db = get_dynamic_db(); //ur dynamic DB -- $this->dyniamic_db
}

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

    return $query->row();
}

相关问题