0

ヘルパー クラスを作成し、それに PDO インスタンスを追加しています。クラス メソッドでさまざまなデータベースに接続できるようにしたい。それを回避する最善の方法は何ですか?これまでのところ、私は持っています:

    public static function connect($dbType, $database, $host, $username,
    $password, $options = array())
{
    switch($dbType)
    {
        case "pgsql":
            $DSN = "pgsql:dbname=$database;host=$host";
            break;

        case "mysql":
            $DSN = "mysql:host=$host;dbname=$database";
            break;

        case .....
    }
}

$dbType を何度も検出する必要なく、これを実行するより良い方法はありますか? それを行うより動的な方法はありますか?

4

1 に答える 1

1

個人的には、PDO は各ドライバーの複雑なクエリ言語の違いと機能を抽象化しないため、それほど多くのデータベースをプロビジョニングする必要はないと思います :)

そうは言っても、DSN を生成するだけの関数を作成できます。

function generateDSN($type, array $params)
{
    return "$type:" . join(';', array_map(function($v, $k) {
        return "$k=$v";
    }, $params, array_keys($params)));
}

echo generateDSN('mysql', array(
        'dbname' => 'test',
        'host' => 'localhost',
        'charset' => 'utf8',
));

mysql:dbname=test;host=localhost;charset=utf8
于 2012-08-14T04:37:10.247 に答える