web-dev-qa-db-ja.com

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();
}

データベース名(testdb値)を格納する関数または定数がPDO内にありますか? $ dbhでvar_dumpを実行しましたが、何も見つかりません...

26
thelolcat

Mysqlを使用している場合は、 select database() を実行して、デフォルトのデータベースの名前を取得できます。

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

いいえ、組み込み機能はありません。

ただし、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;
    }

    ...
13
zerkms