2012-09-21 1 views
5

PHP 개발을 위해 Zend Framework를 사용하고 있으며 쿼리를 실행하는 데 사용되는 작은 함수가 있습니다. 이것은 오류가 아닙니다. 코드와 모든 것이 잘 작동합니다. 그러나 나는 이것의 뒤에 어떤 개념을 알고 싶다.Zend DB 데이터베이스 연결 관리 방법

/** 
    * Get dataset by executing sql statement 
    * 
    * @param string $sql - SQL Statement to be executed 
    * 
    * @return bool 
    */ 
    public function executeQuery($sql) 
    { 
     $this->sqlStatement = $sql; 

     if ($this->isDebug) 
     { 
      echo $sql; 
      exit; 
     } 

     $objSQL = $this->objDB->getAdapter()->prepare($sql); 

     try 
     {   
      return $objSQL->execute(); 

     } 
     catch(Exception $error) 
     { 

      $this->logMessage($error->getMessage() . " SQL : " .$sql); 
      return false; 
     } 
     return false; 
    } 

벨로 우어는 나를위한 명확하지 않은 영역입니다.

  1. 어떻게 Zend_Db_Table_Abstract 데이터베이스 연결을 유지합니까?
  2. 이 함수를 호출 할 때 항상 새 연결을 만들지 아니면 연결 풀링을 수행합니까?
  3. 데이터베이스 연결을 열거 나 닫는 코딩을 작성하지 않았습니다. 그러면 프레임 워크가 자동으로 연결을 종료합니다.
  4. 이 기능을 실행하면이 열기/닫기 연결이 항상 작동하는 경우 성능 문제가 있습니까?

감사의 말씀과 제안에 대해 감사드립니다.

답변

15

즉시 RDBMS 서버에 연결하지 않는 어댑터 클래스 의 인스턴스를 생성 연결

만들기. 어댑터는 연결 매개 변수를 저장하고 요청시 실제 연결을 수행합니다. 처음으로 쿼리를 실행해야합니다. 이렇게하면 어댑터 객체를 만드는 것이 빠르고 저렴 해집니다. 응용 프로그램이 현재 제공하는 요청 중에 데이터베이스 쿼리를 실행해야하는지 확실하지 않은 경우에도 Adapter 인스턴스를 만들 수 있습니다.

강제로 어댑터를 RDBMS에 연결해야하는 경우 getConnection() 메소드를 사용하십시오. 이 메소드는 해당 PHP 데이터베이스 확장이 나타내는 연결 객체를 반환합니다. 예를 들어 PDO 드라이버 용 Adapter 클래스를 사용하는 경우 getConnection()은 특정 데이터베이스에 대한 라이브 연결로 시작한 후 PDO 객체를 반환합니다.

잘못된 계정 자격 증명 또는 다른 RDBMS 서버 연결 실패의 결과로 throw되는 예외를 잡으려면 연결을 강제하는 것이 유용 할 수 있습니다. 이러한 예외는 연결이 만들어 질 때까지 throw되지 않으므로 데이터베이스에 대한 첫 번째 쿼리가 아닌 한 곳에서 예외를 처리하면 응용 프로그램 코드가 단순 해집니다.

또한 어댑터를 직렬화하여 세션 변수와 같이 저장할 수 있습니다. 이는 어댑터 자체뿐만 아니라 Zend_Db_Select 객체와 같이 다른 객체를 집계하는 데 매우 유용합니다. 기본적으로 어댑터는 직렬화 할 수 있습니다. 원하지 않으면 Zend_Db :: ALLOW_SERIALIZATION 옵션을 FALSE로 전달하는 것을 고려해야합니다 (위의 예 참조). lazy connections 원칙을 존중하기 위해 직렬화되지 않은 어댑터는 다시 연결되지 않습니다. 그런 다음 getConnection()을 직접 호출해야합니다. 어댑터 옵션으로 TRUE를 가진 Zend_Db :: AUTO_RECONNECT_ON_UNSERIALIZE를 전달하여 어댑터가 자동으로 다시 연결되게 할 수 있습니다.

은 일반적으로는 데이터베이스 연결을 종료 할 필요가없는 연결을 닫기

. PHP는 자동으로 모든 리소스와 요청의 끝을 정리합니다. 데이터베이스 확장은 리소스 개체에 대한 참조를 정리할 때 연결을 닫도록 설계되었습니다.

그러나 많은 데이터베이스 연결을 시작하는 PHP 스크립트가 오래 지속되면 RDBMS 서버의 용량이 소진되지 않도록 연결을 닫아야 할 수 있습니다. 어댑터의 closeConnection() 메소드를 사용하여 기본 데이터베이스 연결을 명시 적으로 닫을 수 있습니다.

릴리스 1.7.2 이후 현재 isConnected() 메소드를 사용하여 RDBMS 서버에 연결되어 있는지 확인할 수 있습니다. 이는 연결 자원이 시작되었고 종료되지 않았 음을 의미합니다. 이 함수는 현재 연결의 서버 측 종료를 테스트 할 수 없습니다. 이것은 내부적으로 연결을 닫는 데 사용됩니다. 오류없이 연결을 여러 번 닫을 수 있습니다. PDO 어댑터의 경우 이미 1.7.2 이전 이었지만 다른 경우에는 그렇지 않았습니다.

More information