在ZF中捕获“INSERT ... ON DUPLICATE KEY UPDATE”解决方法的异常

时间:2011-02-18 12:57:10

标签: mysql zend-framework exception-handling mysql-error-1062

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_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();
            }
        }

2 个答案:

答案 0 :(得分:3)

看看会抛出什么异常:

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

那应该告诉你需要捕获什么样的异常,因为“Exception”会捕获每种类型的异常,无论是ZF异常还是PDO异常还是完全不同的异常

答案 1 :(得分:3)

会抛出Zend_Db_Statement_Exception

关于找出抛出什么异常,你可以看一下edorian's answer