Ответ 1
Вы можете использовать метод setAttribute()
(по существу, значение ключа) для хранения имени базы данных при первоначальной настройке, а затем использовать getAttribute()
позже в вашем коде, чтобы узнать, что это за значение.
$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';
try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
Есть ли в PDO функция или константа, которая хранит имя базы данных (значение testdb
)? Я сделал var_dump на $dbh и не могу найти что-нибудь...
Вы можете использовать метод setAttribute()
(по существу, значение ключа) для хранения имени базы данных при первоначальной настройке, а затем использовать getAttribute()
позже в вашем коде, чтобы узнать, что это за значение.
Учитывая, что вы работаете с mysql, вы можете сделать select database()
, чтобы получить имя базы данных по умолчанию.
/* @var $pdo PDO */
$pdo->query('select database()')->fetchColumn();
Нет, нет встроенной функции.
Но вы можете расширить class MyPdo extends PDO
, проанализировать и сохранить dsn и вернуть его некоторым аксессуаром
class MyPdo extends PDO
{
...
/**
* @param string $dsnParameter
* @param string|null $default
* @throws RuntimeException
* @return string|null
*/
public function getDsnValue($dsnParameter, $default = NULL)
{
$pattern = sprintf('~%s=([^;]*)(?:;|$)~', preg_quote($dsnParameter, '~'));
$result = preg_match($pattern, $this->dsn, $matches);
if ($result === FALSE) {
throw new RuntimeException('Regular expression matching failed unexpectedly.');
}
return $result ? $matches[1] : $default;
}
...