繁体   English   中英

Zend DB如何管理数据库连接

[英]How Zend DB Manage Database Connections

我正在使用Zend Framework进行PHP开发,这是我用来执行查询的一个小函数。 这不是一个错误。 代码和一切正常。 但我想知道这背后的一些概念。

/** 
    * 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. 我没有写任何编码来打开或关闭数据库连接。 那么zend框架会自动关闭连接吗?
  4. 如果执行此功能,如果此打开和关闭连接始终有效,是否存在任何性能问题?

谢谢你,感谢你对此的建议和意见。

创建连接

创建Adapter类的实例不会立即连接到RDBMS服务器 适配器保存连接参数,并在您第一次需要执行查询按需进行实际连接。 这可确保创建Adapter对象快速且廉价。 即使您不确定在应用程序提供的当前请求期间是否需要运行任何数据库查询,也可以创建适配器实例。

如果需要强制适配器连接到RDBMS,请使用getConnection()方法。 此方法返回连接的对象,由相应的PHP数据库扩展表示。 例如,如果对PDO驱动程序使用任何Adapter类,则getConnection()在将其作为与特定数据库的实时连接启动后返回PDO对象。

如果要捕获由于无效帐户凭据而导致的任何异常,或者其他连接到RDBMS服务器的失败,强制连接可能很有用。 在建立连接之前不会抛出这些异常,因此如果您在一个地方处理异常,而不是在第一次查询数据库时,它可以帮助简化您的应用程序代码。

此外,可以将适配器序列化以存储它,例如,存储在会话变量中。 这不仅对于适配器本身非常有用,对于聚合它的其他对象(如Zend_Db_Select对象)也非常有用。 默认情况下,允许对适配器进行序列化,如果不需要,则应考虑将Zend_Db :: ALLOW_SERIALIZATION选项与FALSE一起传递,请参阅上面的示例。 为了尊重延迟连接原则,适配器在反序列化后不会重新连接。 然后,您必须自己调用getConnection()。 您可以通过将Zend_Db :: AUTO_RECONNECT_ON_UNSERIALIZE作为适配器选项传递给TRUE来使适配器自动重新连接。

关闭连接

通常,不必关闭数据库连接。 PHP会自动清理所有资源并结束请求。 数据库扩展旨在关闭连接,因为清理了对资源对象的引用。

但是,如果您有一个启动许多数据库连接的长时间PHP脚本,则可能需要关闭连接,以避免耗尽RDBMS服务器的容量。 您可以使用Adapter的closeConnection()方法显式关闭底层数据库连接。

从版本1.7.2开始,您可以使用isConnected()方法检查当前是否已连接到RDBMS服务器。 这意味着已启动连接资源但未关闭。 此功能当前无法测试例如服务器端关闭连接。 这在内部用于关闭连接。 它允许您多次关闭连接而不会出现错误。 对于PDO适配器而言,1.7.2之前已经是这种情况,但其他情况则不然。

更多信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM