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