1

私のスクリプトでは、複数のデータベースへの接続が必要です。一部のパーツは 1 つに接続するだけで十分です。これはすべて適切で適切ですが、場合によっては、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

databaseconfigs を配列に保存して、それを使用できます。それが 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']
    );
}

連想配列を使用せずに定数を使用する場合は、定数に as という名前を付けて、mysqli_connect() の入力としてMAIN_HOSTNAME, STATS_HOSTNAME, ...使用できます。constant($which . '_HOSTNAME')

于 2012-05-07T12:13:14.860 に答える