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



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

在CI中,您可以通过两种方式来实现。

  1. 从config/database.php

    您可以调用默认db来获取行,并使用动态键assign在循环中运行。根据需要,您可以调用该数据库凭据。

  2. 来自模型或控制器。

    $this->负载->数据库(数组('hostname'=>'localhost’,'用户名'=>'根','密码'=>'','数据库'=>'ci’,'dbdriver'=>'mysqli’,));

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

助手:

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();
}

相关内容

  • 没有找到相关文章

最新更新