首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在数据库类中使用会话的代码点火器

在数据库类中使用会话的代码点火器
EN

Stack Overflow用户
提问于 2016-12-16 18:46:05
回答 1查看 1.1K关注 0票数 0

在代码点火器项目中我需要你的帮助。我希望使用会话来动态更改配置文件夹中数据库文件上的数据库。我在配置文件中做$db‘’default‘= $_SESSION'db_name',但不起作用。登录页面应检查要登录的其他数据库访问权限。

在选择数据库之前是否可以更改连接?

登录页

代码语言:javascript
复制
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:

代码语言:javascript
复制
<?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();

但是我不知道如何在查询的时间更改数据库的名称。我试过了,但没有改变。

代码语言:javascript
复制
<?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');
    }....

你能帮我一下吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-17 23:15:25

我不确定这是否能回答你的问题,但也许会有帮助。

guide/database/connecting.html#connecting-to-multiple-databases

您可以随时切换数据库,只需使用

代码语言:javascript
复制
$this->db->db_select($database2_name);

但是,在代码中,可以销毁会话,然后尝试设置会话数据变量。会话已被销毁,以便在创建新会话之前不会在任何地方设置变量。

我建议您将数据库设置为配置文件中的组,并切换组。或者,您可以像文档中所描述的那样同时连接到这两者,并通过使用数据库对象将查询设置为哪一个来选择使用哪一个。尽管说实话,我真的认为您需要重新考虑您的逻辑,因为在会话变量中设置数据库似乎是处理任何问题IMHO的一个相当奇怪的方法。

但是,如果在控制器中读取会话变量,检查它是系统的公认数据库,检查用户是否允许访问它,然后连接到它,应该可以正常工作。您不应该试图访问配置文件中的会话数据,因为在读取配置文件时,会话数据可能不可用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41190648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档