1

ZF 1.9.5ここ。ON DUPLICATE KEY UPDATEZend_Db_Tableを使用するときに、エミュレートする例外をキャッチすることを提案した人がいます。

現在、私は

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'i7dd30253497cfc0539d7c5830a926f7d' for key 'ukey'

..使用する場合

$orderRow = $this->createRow();
$orderRow->ukey = $ukey;
$orderRow->save();

だから、私はそのバガーをで捕まえたいですtry / catch。例外としてupdate、それ以外の場合insert
しかし、私は何を捕まえるのかわかりません。Zend_Db_ExceptionPDOExceptionZend_Db_Adapter_Exception?何度か試しましたが、うまくいかなかったと思います。


後で編集します。これは私のために働いた:

        try {
            $orderRow = $this->createRow();
            $orderRow->ukey = $ukey;
            $orderRow->$stepCol = time();
            $orderRow->save();
        } catch (Zend_Db_Statement_Exception $e) {
            // on UNIQUE error, update
            if ($e->getCode() == 23000) {
                $orderRow = $this->fetchRow($this->select()->where('ukey = ?', $ukey));
                $orderRow->$stepCol = time();
                $orderRow->save();
            }
        }
4

2 に答える 2

4

このようにスローされる例外を見てください。

try {
    // query
} catch (Exception $e) {
    var_dump(get_class($e));
}

「例外」は、ZF例外、PDO例外、またはまったく異なるものなど、あらゆる種類の例外をキャッチするため、キャッチする必要のある例外の種類がわかります。

于 2011-02-18T13:05:58.967 に答える
3

をスローしZend_Db_Statement_Exceptionます。

スローされる例外を見つけることに関しては、edorianの答えを見ることができます。

于 2011-02-18T13:15:46.760 に答える