0

Zend Frameworkでトランザクションを使用しようとしていますが、スクリプトが機能しています。

ただし、テスト中、mysqlサーバーが非アクティブであることが原因の例外を除いて、try/catch関数がすべての例外をキャッチすることに気付きました。

これは起こるはずですか?サーバーがクラッシュした場合、醜い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);

同様の例外の重複エントリがキャッチされ、一時的なカスタムエラーメッセージ(挿入に失敗しました)が返されます。しかし、データベースサーバーをオフにすると、phpcatchはこのエラーをキャプチャしません。

**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 に答える