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
抓住那个bugger。例外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();
}
}
答案 0 :(得分:3)
看看会抛出什么异常:
try {
// query
} catch (Exception $e) {
var_dump(get_class($e));
}
那应该告诉你需要捕获什么样的异常,因为“Exception”会捕获每种类型的异常,无论是ZF异常还是PDO异常还是完全不同的异常
答案 1 :(得分:3)
会抛出Zend_Db_Statement_Exception
。
关于找出抛出什么异常,你可以看一下edorian's answer。