Find current Doctrine database connection settings in symfony

匿名 (未验证) 提交于 2019-12-03 03:05:02

问题:

I need to know the database name and database server name inside a symfony project. How can one access the current database connection settings programmatically in symfony (using Doctrine)?

回答1:

for example:

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


回答2:

Assuming you have the EntityManager as $this->em

Get Doctrine Database Name from Symfony2:

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

Get Doctrine Host Name (Server Name) from Symfony2:

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

There are many other parameters you can access from the connection such as username, port and password. See the connection class for more info



回答3:

The dbname in the dsn for a specific 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: ******** 

In the Action:

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

Then, the dbname is:

echo $mDbConexion1[1]; //basegestion1 


回答4:

Use this code:

$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; } 


回答5:

Try this one

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

Updated

As Function split() is deprecated so here is recommended way.

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


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!