質問

ZF 1.9.5 ここだ誰かがエミュレートする例外をキャッチすることを提案しました ON DUPLICATE KEY UPDATE Zend_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_Exception? PDOException? Zend_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();
            }
        }
役に立ちましたか?

解決

どのような例外がこのようにスローされているかを見てください:

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

これは、「Exception」がZF例外であれPDO例外であれ、まったく異なるものであれ、すべてのタイプの例外をキャッチするため、どのような例外をキャッチする必要があ

他のヒント

それは投げます Zend_Db_Statement_Exception.

どのような例外がスローされるかを知ることに関しては、次を見ることができます エドリアンの答え.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top