2016-12-16 81 views
0

使用會話,我需要你的笨項目的幫助。我想使用會話動態更改數據庫文件在config文件夾中的數據庫。 我做$ DB [ '默認'] [ '數據庫'] = $ _SESSION [ 'DB_NAME'],在配置文件中,但不工作。 登錄頁面應檢查進行登錄的其他數據庫訪問權限。笨的數據庫類

是否有可能改變選擇數據庫之前的連接?

登錄頁面

public function login(){ 
if(!$this->session->userdata('id_funcionario') || !$this->session->userdata('logado')){ 

    $this->db->database= "test"; 
    $this->session->destroy(); 
    $subdomain = $_SERVER['HTTP_HOST']; 
    $this->db->select("database"); 
    $this->db->where("subdomain", $subdomain); 
    $access = $this->db->get("table")->row(); 
    $this->session->set_userdata("database", $access->database); 
    $this->load->view('/geral/login'); 

}else{ 
    $url = base_url('home'); 
    header("Location: $url "); 

} 

}

登錄頁面的作品!

的數據發送的AJAX來:

<?php if(!defined('BASEPATH')) exit('No direct script access allowed'); 
class Ajax extends CI_Controller { 

    public function __construct(){ 
     parent::__construct(); 
     $this->load->helper('url'); 
     $this->load->helper('html'); 
     $this->load->library('session'); 

    } 
public function toLog() 
    { 
     $email = $this->input->post('email'); 
     $pass= md5($this->input->post('pass')); 

     $this->db->database = $this->session->userdata('database'); 
     $this->db->select('*'); 
     $this->db->from('users'); 
     $this->db->where('usu_email',$email); 
     $this->db->where('usu_pass',$pass); 
     $usuario = $this->db->get()->result(); 

但我不知道如何在查詢的時候更改數據庫的名稱。我已經嘗試過,並且保持不變。

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


/** 
* Database Driver Class 
* 
* This is the platform-independent base DB implementation class. 
* This class will not be called directly. Rather, the adapter 
* class for the specific database will extend and instantiate it. 
* 
*/ 

    class CI_DB_driver { 

    var $username; 
    var $password; 
    var $hostname; 
    var $database; 

....... 

    /** 
    * Constructor. Accepts one parameter containing the database 
    * connection settings. 
    * 
    * @param array 
    */ 
    function __construct($params) 
    { 
     if (is_array($params)) 
     { 
      foreach ($params as $key => $val) 
      { 
       $this->$key = $val; 
      } 
     } 
     $CI = & get_instance(); 
     $this->database = $CI->session->userdata('database'); 

     log_message('debug', 'Database Driver Class Initialized'); 
    }.... 

你能幫幫我嗎?

回答

0

我不知道這是否會回答你的問題,但它可能的幫助。

https://www.codeigniter.com/user_guide/database/connecting.html#connecting-to-multiple-databases

您只需使用

$this->db->db_select($database2_name); 

在你的代碼雖然,你破壞了會話,然後嘗試設置一個會話數據變量隨時切換數據庫。會話已被銷燬,因此變量不會在創建新會話之前設置到任何地方。

我建議你設置你的數據庫作爲配置文件組,然後切換組。或者,您可以按照文檔中的描述同時連接到兩者,並通過使用數據庫對象來設置查詢來選擇要使用哪一個。雖然說實話我真的認爲,也許你需要重新審視你的邏輯,因爲在會話變量中設置數據庫似乎是一種解決任何問題的非常奇怪的方式。

但是,如果在你的控制器,你讀你的會話變量,檢查它是爲您的系統公認的數據庫,查詢用戶被允許訪問,然後連接到它,應該能正常運行。你不應該試圖在配置文件中訪問會話數據,因爲在讀取配置文件時會話數據可能不可用。