繁体   English   中英

CODEIGNITER从用户选择的值中选择数据库

[英]CODEIGNITER Select database from user chosen value

我正在使用应用程序(学校管理系统)我将创建一个多数据库驱动的应用程序,每年一个单独的数据库。

我的方法是>>我做了一个带有选择选项的表单

<form method="POST" action="host/configure/select_database">
    <select name="database">
        <option value="2010">Year 2010</option>
        <option value="2011">Year 2011</option>
        <option value="2012">Year 2012</option>
        <option value="2013">Year 2013</option>
        <option value="2014">Year 2014</option>
        <option value="2015">Year 2015</option>
        <option value="soon...">So On ... </option>
    </select>
    <input type="submit" value="choose year"/>
</form>

当用户从给定选项中选择任何年份时,我的select_database将设置数据库以便使用

configure.php(控制器)

public function select_database(){
    session_start();
    $_SESSION['current_database'] = $this->input->post('database');
    redirect_to('/');
}

这是我在database.php中选择的数据库代码

为database.php

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

$database = isset($_SESSION['current_database'])?$_SESSION['current_database']:'2015';

$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'Username';
$db['default']['password'] = "DbPassword";
$db['default']['database'] = $database;
$db['default']['dbdriver'] = 'mysql';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = FALSE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;

这是我的方法是否有任何其他最好的方式来改变用户选择的数据库,请确保我是正确或不是谢谢

我不确定,但我认为在控制器初始化之前加载了数据库配置。

您可以手动连接到一个或多个数据库。 首先,保存到会话,如您所写:

configure.php(控制器)

public function select_database()
{
    $your_dbs = array('2010', '2011');
    $db = $this->input->post('database');

    if( ! in_array($db, $your_dbs))
        show_error('This database not exists');

    $this->session->set_userdata('selected_db', $db);
    redirect('/');
}

在模型的构造函数中,您可以创建(另一个)连接:

a_model.php

private $_db;

public function __construct()
{
    $this->_db = $this->load->database(array(
        'hostname' => 'localhost',
        'username' => 'root',
        'password' => '',
        'database' => $this->session->userdata('selected_db'),
        'dbdriver' => 'mysqli',
    ), TRUE);
}

public function get_data()
{
    return $this->_db->get('users')->result();
}

在您的模型中,您还可以在构造函数中检查这是否是一个有效的数据库,并带有帮助程序。 我刚刚写了一个快速草图,我将如何做到这一点。

如果您碰巧在同一个域上,并且不需要切换连接凭据,并且只是暂时更改数据库,请执行以下操作:

//get the previous database in use
$desired_db = '2005';
$current_db = $this->db->database;
$this->db->database = $desired_db;
$this->load->database();
$this->db->db_select(); // this line is important

// run your queries,
$this->db->select();
$script = "db queries";
$query = $this->db->query($script);
$result = $query->result();

// switch back when you are done
$this->db->database = $current_db;
$this->load->database();
$this->db->db_select(); // this line is important

您也可以发送不同的连接凭据。

$this->db->hostname = $hostname;
$this->db->username = $username;
$this->db->password = $password;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM