0

我正在尝试在 Zend 框架中使用事务并拥有一个工作脚本。

然而,在测试中,我注意到一个 try/catch 函数将捕获任何异常,除了由 Mysql 服务器不活动引起的异常。

这应该发生吗?如果我的服务器崩溃了,我担心会返回一个丑陋的 Zend 异常,并且应用程序将停止优雅地失败。

我的代码如下所示:

function insertInbox ($userId, $mail_id )
{   

    $db = Zend_Db_Table::getDefaultAdapter();  

    $table = new Application_Model_DbTable_Inbox; 

    try {
        $db->beginTransaction();

        $data = array (
                   'user_id'    => $userId,
                   'mail_id'    => $mail_id
                   );

        $insertedId[] = $table -> insert($data);

        $db -> commit();

        return $insertedId;
        }

    catch(exception $e){ 
        $db->rollback();
        return "insert failed";//.$e;
        }   
}

$tt = insertInbox ( 666,666);   
print_r($tt);

捕获到类似异常的重复条目,并返回临时自定义错误消息 -插入失败。但是如果我关闭数据库服务器,php catch 不会捕获这个错误:

**Message:** SQLSTATE[HY000] [2002] No connection could be made because the target machine actively refused it.

任何想法表示赞赏。

4

1 回答 1

1

PHP 的一些数据库扩展尝试在没有建立数据库连接并调用函数时创建数据库连接,这需要一个。在这种情况下$db->rollback(),它本身会引发异常。

于 2012-11-02T02:11:40.927 回答