在Codeigniter中动态加载数据库连接数据

时间:2016-10-22 05:19:44

标签: php postgresql codeigniter pdo

我正在尝试完成以下功能:我有一个到数据库的主连接(在application / config / database.php:db ['default']中),并且连接有效,它检索数据,我想要使用该数据建立与不同数据库的新连接。

这是可能的还是我需要创建一个外部PDO连接来处理它?

(我正在使用Codeigniter 3.1.0)

3 个答案:

答案 0 :(得分:3)

在Touheed Khan的帮助下,我能够解决我的问题,在此发布,因为我必须对建议的解决方案进行一些解决方法才能使其正常工作。以下是我的解决方案现在的工作方式:

<强> Controller.php这样

<?php defined('BASEPATH') OR exit('No direct script access allowed');

class Controller extends CI_Controller {
 public $dynamicDB;

 public function __construct() {
  parent::__construct();
 }

 public function index() {
  //Somehow retrieve the following information from user.
  $host;
  $user;
  $pass;
  $dbname;
  $port;
  // End of retrieval information from user.

  $this->dynamicDB = array(
   'hostname' => $host,
   'username' => $user,
   'password' => $pass,
   'database' => $dbname,
   'dbdriver' => 'postgre',
   'dbprefix' => '',
   'pconnect' => FALSE,
   'db_debug' => TRUE,
   'port' => $port
  );

  $this->load->model('data_model');
  $result = $this->data_model->select($this->dynamicDB, 
                                      $this->get('id'));
  var_dump($result);
 }
}

<强> Data_model.php

<?php defined('BASEPATH') OR exit('No direct script access allowed');
class Data_model extends CI_Model {
 function __construct(){
  parent::__construct();
 }

 public function returnQuery($query) {
  if ($query->num_rows() > 0) {
   return $query->result();
  } else {
   return array();
  }
 }

 public function select($dynamicDB, $id) {
  $dynamicDB = $this->load->database($dynamicDB, TRUE);

  $dynamicDB->select('*');
  $dynamicDB->where('id', $id);
  $dynamicDB->from('table');

  $query = $dynamicDB->get();
  return $this->returnQuery($query);
 }
}

答案 1 :(得分:0)

答案 2 :(得分:0)

&#13;
&#13;
$this->db2 = $this->load->database('seconddb', TRUE);    // 'seconddb' is a connection array key in database config like 'default'. 
&#13;
&#13;
&#13;

有关详细信息,请参阅此答案here,repox已详细解释了所有内容。

如果需要更多帮助,我很乐意提供帮助。

Thanx,Happy Coding。