如何在PDO中获取数据库名称?

时间:2012-02-17 03:02:04

标签: php database pdo

$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值)的函数或常量?我在$ dbh上做了一个var_dump,无法找到任何东西......

3 个答案:

答案 0 :(得分:32)

鉴于您使用的是mysql,您可以select database()获取默认数据库的名称。

/* @var $pdo PDO */
$pdo->query('select database()')->fetchColumn();

答案 1 :(得分:12)

不,没有内置功能。<​​/ p>

但你可以扩展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;
    }

    ...

答案 2 :(得分:-7)

您可以使用setAttribute()(本质上是一个键值对)方法在最初设置时存储数据库名称,然后在代码中稍后使用getAttribute()来查看值是什么

http://www.php.net/manual/en/pdo.setattribute.php

相关问题