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

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

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

<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();
}

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

点赞