2012-02-17 8 views
19
$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를 수행하고 아무것도 찾을 수 없다 ...PDO에서 데이터베이스 이름을 얻는 방법은 무엇입니까?

답변

-7

당신은 당신이 그것을 설정할 때 데이터베이스 이름을 저장하기 위해 setAttribute() (기본적으로 키 값 쌍) 방법을 사용할 수 class MyPdo extends PDO을 확장 구문 분석하고 DSN 저장하고 일부 접근하여 반환 할 수 있습니다 처음에는 코드에서 나중에 getAttribute()을 사용하여 값이 무엇인지 확인하십시오.

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

+2

PDO :: setAttribute가 정수 만 키로 허용하기 때문에 예상대로 작동하지 않습니다. 자신의 상수를 정의하는 것은 가능하지만 조금 까다 롭습니다. http : // php.net/manual/ko/pdo.setattribute.php' – tomvo

+4

잘못된 추측 된 대답 ... - PHP는 런타임에 설정할 수있는 동적 공용 속성을 가지고 있습니다.'setAttribute)'또는'getAttribute()', 단지'$ pdo-> myDataBaseNameProperty = 'dbame';만으로 충분할 것입니다. – hakre

+2

3 년 후, 그리고 내 (대답) 대답은 시간의 시험을 서 있지 않았습니다. 내가 추천할만한 명확한 답변이 있습니다. –

13

아니요 내장 기능이 없습니다.

하지만 당신은

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

    ... 
+1

구문 분석을 사용하지 않는 것이 좋습니다. 그가 확장되면 참조 할 수있는 데이터베이스 이름의 멤버를 추가해야합니다. –

+0

@Mike Purcell : "그것이 다릅니다" – zerkms

+1

그냥 코드를 추가했습니다. 그것이 광범위하게 테스트되지는 않았지만 몇 주 전에이 글을 썼다. 단지 문제를 다시보고 있었고 문제를 일으키지 않았으므로 여기에 예제로 게시했다. 그것은 어떤 스펙 후에도 쓰여지지 않았지만 지금까지는 작동합니다. DSN에서 데이터베이스 이름을 가져 오는 것. – hakre

28

당신은 MySQL의에있어 감안할 때, 당신은 기본 데이터베이스의 이름을 가져 select database() 할 수 있습니다.

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

일반적으로이 기능을 사용하지는 않았지만 PDO 코드를 확장 할 수없는 특정 상황에서는 정상적으로 작동합니다. –

관련 문제