2012-09-21 36 views
5

Estoy usando Zend Framework para mis desarrollos PHP y aquí hay una pequeña función que utilicé para ejecutar una consulta. Esto no se trata de un error. El código y todo funciona bien. Pero quiero saber algún concepto detrás de esto.Cómo gestiona Zend DB Conexiones de base de datos

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

Bellow son áreas poco claras para mí.

  1. Cómo Zend_Db_Table_Abstract ¿Mantiene las conexiones de la base de datos?
  2. ¿Está creando una nueva conexión todo el tiempo cuando llamo a esta función o tiene alguna agrupación de conexiones?
  3. No escribí ningún código para abrir o cerrar la conexión de la base de datos. Entonces, ¿zend framework automáticamente cerrará las conexiones?
  4. Si esta conexión de apertura y cierre funciona todo el tiempo si ejecuto esta función, ¿hay algún problema de rendimiento?

Gracias y apreciamos sus sugerencias y opiniones al respecto.

Respuesta

15

Creación de la conexión

Creación de una instancia de una clase adaptador no se conecta inmediatamente al servidor RDBMS. El adaptador guarda los parámetros de conexión y realiza la conexión real bajo demanda, el primera vez que necesita ejecutar una consulta. Esto garantiza que la creación de un objeto Adapter sea rápida y económica. Puede crear una instancia de un Adaptador incluso si no está seguro de que necesite ejecutar alguna consulta de base de datos durante la solicitud actual de su aplicación.

Si necesita forzar el adaptador para conectarse al RDBMS, use el método getConnection(). Este método devuelve un objeto para la conexión según lo representado por la respectiva extensión de base de datos PHP. Por ejemplo, si utiliza cualquiera de las clases de Adaptador para controladores PDO, getConnection() devuelve el objeto PDO, después de iniciarlo como una conexión en vivo a la base de datos específica.

Puede ser útil forzar la conexión si desea capturar cualquier excepción que arroje como resultado de credenciales de cuenta no válidas u otra falla al conectarse al servidor RDBMS. Estas excepciones no se lanzan hasta que se realiza la conexión, por lo que puede ayudar a simplificar el código de la aplicación si maneja las excepciones en un solo lugar, en lugar de hacerlo en el momento de la primera consulta en la base de datos.

Además, un adaptador se puede serializar para almacenarlo, por ejemplo, en una variable de sesión. Esto puede ser muy útil no solo para el adaptador en sí, sino también para otros objetos que lo agregan, como un objeto Zend_Db_Select. De forma predeterminada, los adaptadores pueden ser serializados, si no lo desea, debe considerar pasar la opción Zend_Db :: ALLOW_SERIALIZATION con FALSE, vea el ejemplo anterior. Para respetar el principio de conexiones diferidas, el adaptador no se volverá a conectar después de haber sido deserializado. A continuación, debe llamar a getConnection() usted mismo. Puede hacer que el adaptador se vuelva a conectar automáticamente pasando Zend_Db :: AUTO_RECONNECT_ON_UNSERIALIZE con TRUE como opción de adaptador.

Cierre de una conexión

Normalmente no es necesario cerrar una conexión de base de datos. PHP limpia automáticamente todos los recursos y el final de una solicitud. Las extensiones de la base de datos están diseñadas para cerrar la conexión a medida que se limpia la referencia al objeto de recurso.

Sin embargo, si tiene un script PHP de larga duración que inicia muchas conexiones a la base de datos, es posible que deba cerrar la conexión para evitar agotar la capacidad de su servidor RDBMS. Puede usar el método closeConnection() del adaptador para cerrar explícitamente la conexión de base de datos subyacente.

Desde la versión 1.7.2, puede comprobar que está actualmente conectado al servidor RDBMS con el método isConnected(). Esto significa que un recurso de conexión se ha iniciado y no se cerró. Esta función actualmente no puede probar, por ejemplo, un cierre del servidor de la conexión. Esto se usa internamente para cerrar la conexión. Le permite cerrar la conexión varias veces sin errores. Ya era el caso antes de 1.7.2 para adaptadores PDO pero no para los otros.

More information

Cuestiones relacionadas