我正在创建一个辅助类并在其中添加一个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? 有没有更有活力的方法呢?
答案 0 :(得分: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