Vraag Hoe de databasenaam in PDO te krijgen?


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

Is er een functie of constante binnen PDO waarin de databasenaam is opgeslagen (de testdb waarde) ? Ik heb een var_dump gedaan op $ dbh en kan niets vinden ...


21
2018-02-17 03:02


oorsprong


antwoorden:


Je zou de kunnen gebruiken setAttribute() (in feite een sleutelwaardepaar) methode om de databasenaam op te slaan wanneer u deze initieel instelt, gebruik dan de getAttribute() later in uw code om te zien wat de waarde is.

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


-7
2018-02-17 03:08



Als je mysql gebruikt, kan dat select database() om de naam van de standaarddatabase te krijgen.

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

30
2018-02-17 04:59



Nee, er is geen ingebouwde functie.

Maar je kunt uitbreiden class MyPdo extends PDO, ontleed en sla dsn op en retourneer het door een accessor

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
2018-02-17 03:04