1

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

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

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");

我在一个充满常量的配置文件中维护实际的主机名、用户名、密码和数据库名称。

然后我在不同的查询中使用各自的链接。

有没有更清洁的方法来做到这一点?

4

3 回答 3

0

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

于 2012-05-07T12:05:31.143 回答
0

很好,虽然你应该尽量不要重复你的代码:

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");
于 2012-05-07T12:06:21.967 回答
0

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

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']
    );
}

如果您不想使用关联数组而更喜欢使用常量,则可以将常量命名为MAIN_HOSTNAME, STATS_HOSTNAME, ...constant($which . '_HOSTNAME')用作 mysqli_connect() 的输入。

于 2012-05-07T12:13:14.860 回答