2012-02-16 3 views
1

db 연결이 PHP에서 열려 있는지 어떻게 확인할 수 있습니까?실제 열린 db 연결 얻기

어떻게이 연결에 대한 참조를 얻을 수 있습니까?

MySQL, Postgres 또는 다른 항목인지 어떻게 확인할 수 있습니까?

+1

무엇 DB 라이브러리에 할 수 있는가? –

+0

mysql_connect()와 pg_connect()로 DB를 열면 특별한 라이브러리는 사용하지 않습니다. – user1027167

+0

(잠재적으로) 열린 연결의 변수 이름을 알고 있습니까? – ManseUK

답변

2

이상적으로 연결이 저장되는 변수를 알 수 있습니다. 이것 없이는 그것을 찾는 번거 로움이됩니다. 그것은 모든 변수를 반복하고 각각을 테스트해야한다는 것을 의미하지만, 현재 범위 밖에있는 변수를 찾지 못하기 때문에 어떤 이유로 든 이것을 수행하는 것이 어려울 수 있습니다. 당신은 그것의 연결 알게되면

if(mysql_thread_id($connection){ 
    // Connection exists 
} 

: 당신은 루프 현재의 변수가 사용 할 수 있습니다 변수가 당신이 아래의 코드를 사용할 수있는 유효한 연결이있는 경우

foreach(get_defined_vars() as $x){ 
    // Code 
} 

확인하기 위해서는 정수를 반환해야합니다 다음을 사용하여 mysql과 같은 연결 유형을 리턴 할 수있다.

echo get_resource_type($connection); 
2

정의 된 모든 변수를 반복하고 리소스 핸들인지 아닌지 알아 내야합니다. 시도하십시오 get_defined_vars().

2

아마 가장 좋은 해결책은 처음에 DB 연결을 추적하지 않는 것입니다.

는 좀 더 가벼운 무언가를 원하는 경우 등 Doctrine 또는 Propel로, 또는 같은 Zend_Db 같은 DBAL을 고려하여 프로젝트 내로 ORM을 통합하는 것이 좋습니다. 이러한 모든 솔루션은 클래스 인스턴스에 데이터베이스 연결을 캡슐화하여 필요할 경우 코드에서 항상 사용할 수 있도록합니다.

1

일반적으로 나는 그것이 가능한 일이라고 생각하지 않는다. 적어도 일종의 복잡한 해결 방법은 아니다. 할 수 있습니다, 정의 된 모든 변수를 통해 예, 루프 :

foreach(get_defined_vars() as $variable){ 
    if(is_resource($variable) && get_resource_type($variable)=='mysql link'){ 
      // Found a connection! 
     var_dump($variable); 
    } 
} 
현재 범위에서 지역 변수에 할당 된 경우에도 비록 사실, 연결이 가능한 상태로 유지

:

function foo(){ 
    $conn = mysql_connect('localhost', 'test', 'test'); 
} 
foo(); 
$res = mysql_query('SELECT NOW() AS what_is_the_time'); 
if($row = mysql_fetch_assoc($res)){ 
    var_dump($row); 
} 

문제는 PHP는 정말 변수에 대해 걱정하지 않는 연결에 대해 이야기 할 때 :

// One connection and zero variables! 
mysql_connect('localhost', 'test', 'test'); 
$res = mysql_query('SELECT NOW() AS what_is_the_time'); 
if($row = mysql_fetch_assoc($res)){ 
    var_dump($row); 
} 

당신은 시도하고 현재 연결에 대한 정보를 찾을 수 있습니다

하나 그래서 경고주의해야이없는 경우 대부분의 기능은 단지 새로운 연결을 stablish하려고 시도하지만
var_dump(mysql_thread_id()); 
// int(2696) 

... ... :

경고 : mysql_thread_id() : 액세스가 사용자에 대한 거부 ''@ '(암호를 사용하여 : NO)'로컬 호스트하지 실제로 성공적인 자격이없는 connnection 시도를 할 수 있습니다 your configuration하지 않는 (false)를
부울

을 ....

나는, 당신이 원하는 어떤 것을 확신 완전히 다른 방법 :