2012-08-14 81 views
0

我正在创建一个辅助类,并在其中添加一个PDO实例。 我希望类方法能够连接到各种数据库。 什么是最好的方式来解决它? 到目前为止,我有:PDO中各种数据库的DSN

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

如果您的所有方法都是静态的,那么它不是一个类。这是一个看起来像一个类的命名空间。 – 2012-08-14 04:21:54

回答

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 
+0

为什么感谢您的帮助!我现在阅读关于助手类的文章,似乎我会避免使用静态! 我将执行您的代码。 再次感谢:) P.S.浦原杰克桑...(忍不住) – 2012-08-14 04:45:51