php中多mysql数据库的使用与管理

php中多mysql数据库的使用与管理,php,mysql,Php,Mysql,我的脚本需要连接到多个数据库。有些部分只需要连接到一个,这很好,但是在某些情况下,我需要在单个脚本执行中对不同的数据库执行查询 目前我正在做这样的事情: function db_connect($which) { if($which == "main") { $maindb = mysqli_connect(HOSTNAME_1, USER, PASSWORD, MAIN_DB); return $maindb; } elseif($which =

我的脚本需要连接到多个数据库。有些部分只需要连接到一个,这很好,但是在某些情况下,我需要在单个脚本执行中对不同的数据库执行查询

目前我正在做这样的事情:

function db_connect($which) {
    if($which == "main") {
        $maindb = mysqli_connect(HOSTNAME_1, USER, PASSWORD, MAIN_DB);
        return $maindb;
    } elseif($which == "stats") {
        $statsdb = mysqli_connect(HOSTNAME_2, USER, PASSWORD, STATS_DB);
        return $statsdb;
    }
}


$maindb = db_connect("main");
$statsdb = db_connect("stats");
我在一个充满常量的配置文件中维护实际的主机名、用户名、密码和数据库名

然后,我在不同的查询中使用相应的链接


有没有更干净的方法

看起来没问题。另一种方法是使用类mysqli而不是函数来操作对象而不是标识符。

很好,不过您应该尽量不要复制代码:

function db_connect($which) {
    if($which == "main") {
        $host = HOSTNAME_1;
        $db = MAIN_DB;
    } elseif($which == "stats") {
        $host = HOSTNAME_2;
        $db = STATS_DB;
    } else {
        throw new Exception('unknown db');
    }
    return mysqli_connect($host, USER, PASSWORD, $db);
}


$maindb = db_connect("main");
$statsdb = db_connect("stats");

您可以将数据库配置存储在阵列中并使用它。codeigniter就是这样做的。


如果您不想使用关联数组,而更喜欢使用常量,可以将常量命名为MAIN_HOSTNAME、STATS_HOSTNAME、。。。并使用常量$which_HOSTNAME'作为mysqli_connect的输入。

您可以将数据库配置存储在阵列中,并执行mysqli_connect$config[$db]['HOSTNAME']、$config[$db]['user'、…..这就是codeigniter的工作方式。如果$which不是main或stats,您现在将得到一个错误,您还应该修改数据库main_db和stats_db的选择。
function get_database_config(){
    $config['main']['hostname'] = "host1";
    $config['main']['user']     = "user1";
    $config['main']['password'] = "pass1";
    $config['main']['database'] = "database1";

    $config['stats']['hostname'] = "host2";
    $config['stats']['user']     = "user2";
    $config['stats']['password'] = "pass2";
    $config['stats']['database'] = "database2";

    return $config;
}

function db_connect($db)
{
    $config = get_database_config();
    return mysqli_connect( 
            $config[$db]['hostname'],
            $config[$db]['user'],
            $config[$db]['password'],
            $config[$db]['database']
    );
}