2011-05-16 7 views

Respuesta

6

por ejemplo:

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

Creo que hay una manera mucho más elegante, ver http://stackoverflow.com/a/26505585/744975 –

2

El dbname en el DSN para una conexion específica:

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: ******** 

En la Acción:

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

Entonces , el dbna mí es:

echo $mDbConexion1[1]; //basegestion1 
1

Usar este código:

$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

Asumiendo que tiene el EntityManager como $this->em

Obtener la base de datos Nombre Doctrina de Symfony2:

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

Get Hacer Anfitrión ctrine Nombre (Name Server) de Symfony2:

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

Hay muchos otros parámetros que puede acceder desde la conexión como username, port y password. Ver el connection class para obtener más información

0

Prueba este

$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']; 

Actualizado

Como Function split() is deprecated manera se recomienda así que aquí.

$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']; 
Cuestiones relacionadas