zend_db zend update framework fetch_obj php mysql zend-framework zend-db zend-db-table

php - update - Cómo gestiona Zend DB las conexiones de la base de datos



zend pdo postgresql (1)

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.

/** * 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 Mantener las conexiones a 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 a 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 sobre esto.


Creando conexión

La creación de una instancia de una clase de Adaptador no se conecta inmediatamente al servidor RDBMS . El adaptador guarda los parámetros de conexión y realiza la conexión real a pedido, la 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 puede ser serializado 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.

Cerrando 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 verificar 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 demás.

Más información