ZFでの"重複キー更新時に挿入..."回避策の例外をキャッチする
-
15-11-2019 - |
質問
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
.
どのような例外がスローされるかを知ることに関しては、次を見ることができます エドリアンの答え.
所属していません StackOverflow