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 回答