PDO 연결 및 연결 관리

연결은 PDO 기본 클래스의 인스턴스를 생성하여 설정됩니다. 사용하려는 드라이버는 중요하지 않습니다. 항상 PDO 클래스 이름을 사용합니다. 생성자는 데이터베이스 소스(DSN이라고 함)를 지정하고 선택적으로 사용자 이름과 암호(있는 경우)를 지정하기 위한 매개변수를 허용합니다.

예제 #1 MySQL에 연결하기

                  
<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
?>
                  
                

연결 오류가 있으면 PDOException 개체가 throw됩니다. 오류 조건을 처리하려는 경우 예외를 catch하거나 set_exception_handler()를 통해 설정한 응용 프로그램 전역 예외 처리기에 대해 예외를 남겨 둘 수 있습니다.

예제 #2 연결 오류 처리

                  
<?php
try {
    $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
    foreach($dbh->query('SELECT * from FOO') as $row) {
        print_r($row);
    }
    $dbh = null;
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}
?>
                  
                

경고 애플리케이션이 PDO 생성자에서 발생한 예외를 포착하지 못하면 zend 엔진이 취하는 기본 동작은 스크립트를 종료하고 역추적을 표시하는 것입니다. 이 역추적은 사용자 이름과 암호를 포함한 전체 데이터베이스 연결 세부 정보를 드러낼 것입니다. 명시적으로(catch 문을 통해) 또는 set_exception_handler()를 통해 암시적으로 이 예외를 catch하는 것은 사용자의 책임입니다.

데이터베이스에 성공적으로 연결되면 PDO 클래스의 인스턴스가 스크립트로 반환됩니다. 연결은 해당 PDO 개체의 수명 동안 활성 상태로 유지됩니다. 연결을 닫으려면 해당 개체에 대한 나머지 참조가 모두 삭제되었는지 확인하여 개체를 삭제해야 합니다. 개체를 보유하는 변수에 null을 할당하면 됩니다. 명시적으로 이 작업을 수행하지 않으면 스크립트가 종료될 때 PHP가 자동으로 연결을 닫습니다.

참고: 이 PDO 인스턴스에 대한 다른 참조가 있는 경우(예: PDOStatement 인스턴스 또는 동일한 PDO 인스턴스를 참조하는 다른 변수에서) 이러한 참조도 제거해야 합니다(예: 참조하는 변수에 null을 할당하여 PDO문).

예제 #3 연결 닫기

                  
<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
// use the connection here
$sth = $dbh->query('SELECT * FROM foo');

// and now we're done; close it
$sth = null;
$dbh = null;
?>
                  
                

많은 웹 응용 프로그램은 데이터베이스 서버에 지속적으로 연결함으로써 이점을 얻을 수 있습니다. 영구 연결은 스크립트가 끝날 때 닫히지 않지만 다른 스크립트가 동일한 자격 증명을 사용하여 연결을 요청할 때 캐시되고 재사용됩니다. 영구 연결 캐시를 사용하면 스크립트가 데이터베이스와 통신해야 할 때마다 새 연결을 설정하는 오버헤드를 피할 수 있으므로 웹 응용 프로그램이 더 빨라집니다.

예제 #4 영구 연결

                  
<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array(
    PDO::ATTR_PERSISTENT => true
));
?>
                  
                

PDO::ATTR_PERSISTENT 옵션의 값은 숫자가 아닌 문자열이 아닌 경우 bool(영구 연결 활성화/비활성화)로 변환되며, 이 경우 여러 영구 연결 풀을 사용할 수 있습니다. 이는 서로 다른 연결이 호환되지 않는 설정(예: PDO::MYSQL_ATTR_USE_BUFFERED_QUERY의 다른 값)을 사용하는 경우에 유용합니다.

메모: 영구 연결을 사용하려면 PDO 생성자에 전달된 드라이버 옵션 배열에서 PDO::ATTR_PERSISTENT를 설정해야 합니다. 개체를 인스턴스화한 후 PDO::setAttribute()를 사용하여 이 속성을 설정하는 경우 드라이버는 영구 연결을 사용하지 않습니다.


메모: PDO ODBC 드라이버를 사용하고 ODBC 라이브러리가 ODBC 연결 풀링을 지원하는 경우(unixODBC 및 Windows가 두 가지이며 더 있을 수 있음) 영구 PDO 연결을 사용하지 않고 대신 연결을 그대로 두는 것이 좋습니다. ODBC 연결 풀링 계층에 캐싱. ODBC 연결 풀은 프로세스에서 다른 모듈과 공유됩니다. PDO가 연결을 캐시하도록 지시하면 해당 연결은 ODBC 연결 풀로 반환되지 않으므로 다른 모듈에 서비스를 제공하기 위해 추가 연결이 생성됩니다.