如何使用zend框架工作只建立一次DB连接

时间:2014-06-25 15:18:17

标签: php zend-framework database-connection zend-db-table

我是zend框架的新手。我正在使用Zend_Db_Table_Abstract来执行数据库操作。现在,我想知道Zend_Db_Table_Abstract将在整个应用程序中建立单个数据库连接,或者它是否会为每个请求创建。

这是我的类,它扩展了zend_db_table_abstract

<?php
    class Model_AppsandBills extends Zend_Db_Table_Abstract {
        protected $_name="appsandbills_master";
    }
?>

抱歉我的英语不好。提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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

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

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

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

来源:http://framework.zend.com/manual/1.12/en/zend.db.adapter.html#zend.db.adapter.connecting.getconnection

另请参阅:How Zend DB Manage Database Connections