$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();
}
Run Code Online (Sandbox Code Playgroud)
PDO中是否存在存储数据库名称(testdb值)的函数或常量?我在$ dbh上做了一个var_dump而且找不到任何东西......
Mar*_*c B 35
鉴于您使用的是mysql,您可以select database()获取默认数据库的名称.
/* @var $pdo PDO */
$pdo->query('select database()')->fetchColumn();
Run Code Online (Sandbox Code Playgroud)
zer*_*kms 12
不,没有内置功能.
但是你可以扩展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;
}
...
Run Code Online (Sandbox Code Playgroud)
Mic*_*per -10
setAttribute()您可以在最初设置数据库名称时使用(本质上是键值对)方法来存储数据库名称,然后getAttribute()在代码中使用稍后的方法来查看值是什么。
http://www.php.net/manual/en/pdo.setattribute.php