在代码点火器项目中我需要你的帮助。我希望使用会话来动态更改配置文件夹中数据库文件上的数据库。我在配置文件中做$db‘’default‘= $_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');
}....你能帮我一下吗?
发布于 2016-12-17 23:15:25
我不确定这是否能回答你的问题,但也许会有帮助。
guide/database/connecting.html#connecting-to-multiple-databases
您可以随时切换数据库,只需使用
$this->db->db_select($database2_name);但是,在代码中,可以销毁会话,然后尝试设置会话数据变量。会话已被销毁,以便在创建新会话之前不会在任何地方设置变量。
我建议您将数据库设置为配置文件中的组,并切换组。或者,您可以像文档中所描述的那样同时连接到这两者,并通过使用数据库对象将查询设置为哪一个来选择使用哪一个。尽管说实话,我真的认为您需要重新考虑您的逻辑,因为在会话变量中设置数据库似乎是处理任何问题IMHO的一个相当奇怪的方法。
但是,如果在控制器中读取会话变量,检查它是系统的公认数据库,检查用户是否允许访问它,然后连接到它,应该可以正常工作。您不应该试图访问配置文件中的会话数据,因为在读取配置文件时,会话数据可能不可用。
https://stackoverflow.com/questions/41190648
复制相似问题