【发布时间】:2011-06-29 19:37:11
【问题描述】:
ZF 1.9.5 在这里。有人建议在使用 Zend_Db_Table 时捕获异常以模拟 ON DUPLICATE KEY UPDATE。
目前,我正在接受
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();
}
}
【问题讨论】:
-
如果代码不是 2300,您可能应该重新抛出异常,以免错过其他类型的错误
标签: mysql zend-framework exception-handling mysql-error-1062