PDO 기본 클래스의 인스턴스를 생성하여 연결이 설정됩니다. 어떤 드라이버를 사용하든 PDO 클래스 이름이 사용됩니다. 생성자는 데이터베이스 소스(소위 DSN)와 사용자 이름 및 비밀번호(있는 경우)를 지정하는 매개변수를 받습니다.
예제 #1 MySQL에 연결
<?php $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass); ?>
연결 오류가 있는 경우 PDOException 예외 개체가 발생합니다. 오류 조건을 처리하려면 예외를 포착하거나 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()를 통해) 예외를 포착하는 것은 책임입니다.
데이터가 성공적으로 연결되면 PDO 클래스의 인스턴스가 스크립트로 반환됩니다. 이 연결은 PDO 개체의 수명 주기 동안 활성 상태로 유지됩니다. 연결을 닫으려면 개체를 삭제하여 해당 개체에 대한 나머지 참조가 모두 삭제되도록 해야 합니다. 개체 변수에 NULL 값을 할당할 수 있습니다. 이를 명시적으로 수행하지 않으면 PHP는 스크립트 끝에서 자동으로 연결을 닫습니다.
예 #3 연결 닫기
<?php $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass); // 在此使用连接 // 现在运行完成,在此关闭连接 $dbh = null; ?>
많은 웹 애플리케이션은 데이터베이스 서비스에 대한 지속적인 연결을 사용하여 이점을 얻습니다. 영구 연결은 스크립트가 끝난 후에도 닫히지 않으며 동일한 자격 증명을 사용하는 다른 스크립트 연결 요청이 이루어질 때 캐시되어 재사용됩니다. 지속적인 연결 캐싱을 사용하면 스크립트가 데이터베이스와 통신해야 할 때마다 새 연결을 설정하는 오버헤드를 방지하여 웹 애플리케이션을 더 빠르게 만들 수 있습니다.
예제 #4 영구 연결
<?php $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array( PDO::ATTR_PERSISTENT => true )); ?>
영구 연결을 사용하려면 PDO 생성자에 전달된 드라이버 옵션 배열에 PDO::ATTR_PERSISTENT를 설정해야 합니다. 객체가 초기화된 후 PDO::setAttribute()를 사용하여 이 속성을 설정하면 드라이버는 영구 연결을 사용하지 않습니다.
PDO ODBC 드라이버를 사용하고 ODBC 라이브러리가 ODBC 연결 풀링을 지원하는 경우(unixODBC와 Windows의 두 가지 접근 방식이 있으며 더 있을 수도 있음) 영구 PDO 연결을 사용하지 않는 것이 좋습니다. ODBC 연결 풀 레이어 처리에 대한 연결 캐시입니다. ODBC 연결 풀은 프로세스의 다른 모듈과 공유됩니다. PDO가 연결을 캐시하도록 요청하면 연결이 ODBC 연결 풀로 반환되지 않으므로 다른 모듈을 제공하기 위해 추가 연결이 생성됩니다.