2012-08-14 75 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