2011-05-16 36 views

回答

6

例如:

foreach(Doctrine_Manager::getInstance()->getConnections() as $connection){ 
    $conn = $connection->getOptions(); 
    preg_match('/host=(.*);/', $conn['dsn'], $host); 
    var_dump($host); 
} 
+2

我想有一種更優雅的方式,請參閱http://stackoverflow.com/a/26505585/744975 – 2014-10-22 10:40:14

2

在DSN中DBNAME特定conexion:

databases.yml裏

all: 
    conexion1: 
    class: sfDoctrineDatabase 
    param: 
     dsn: 'mysql:host=localhost;dbname=basegestion1' 
     username: miusuario 
     password: ******** 
    conexion2: 
    class: sfDoctrineDatabase 
    param: 
     dsn: 'mysql:host=localhost;dbname=baseestadisticas1' 
     username: miusuario 
     password: ******** 

在Action:

$mConexion1Options = Doctrine_Manager::getInstance()->getConnection('conexion1')->getOptions(); 
preg_match('/dbname=(.*)/', $mConexion1Options['dsn'], $mDbConexion1); 

然後,dbna我是:

echo $mDbConexion1[1]; //basegestion1 
1

使用此代碼:

$myConnection   = Doctrine_Manager::getInstance()->getConnection('doctrine')->getOptions(); 
$dsnInfo    = $this->parseDsn($myConnection['dsn']); 
$settings    = array(); 
$settings['dbUser']  = (string) $myConnection["username"]; 
$settings['dbPassword'] = (string) $myConnection["password"]; 
$settings['dbHost']  = (string) $dsnInfo["host"]; 
$settings['dbName']  = (string) $dsnInfo['dbname']; 


private function parseDsn ($dsn) 
{ 
    $dsnArray   = array(); 
    $dsnArray['phptype'] = substr($dsn, 0, strpos($dsn, ':')); 
    preg_match('/dbname = (\w+)/', $dsn, $dbname); 
    $dsnArray['dbname'] = $dbname[1]; 
    preg_match('/host = (\w+)/', $dsn, $host); 
    $dsnArray['host'] = $host[1]; 

    return $dsnArray; 
} 
15

假設你有EntityManager的爲$this->em

獲取學說數據庫名稱從Symfony2的:

$this->em->getConnection()->getDatabase(); 

獲取做ctrine主機名(服務器名)的Symfony2:

$this->em->getConnection()->getHost(); 

有您可以從連接如usernameportpassword訪問許多其它參數。見connection class更多信息

0

試試這個

$conn = Doctrine_Manager::getInstance()->getConnection('doctrine')->getOptions(); 

$dns_array = split(';', $conn['dsn']); 
preg_match('/host=(.*);/', $dns_array, $dbhost); 
preg_match('/dbname=(.*)/', $dns_array, $dbname); 

$dbname = $dbname; 
$dbhost = $dbhost; 
$dbuser = $conn['username']; 
$dbpass = $conn['password']; 

更新

由於Function split() is deprecated所以這裏推薦的方式。

$dns_array = explode(';', $conn['dsn']); 
preg_match('/host=(.*)/', $dns_array[0], $dbhost); 
preg_match('/dbname=(.*)/', $dns_array[2], $dbname); 

$dbhost = $dbhost[1]; 
$dbname = $dbname[1]; 
$dbuser = $conn['username']; 
$dbpass = $conn['password'];