1

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

2 回答 2

4

只要看看像这样抛出什么异常:

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

这应该告诉您需要捕获哪种异常,因为“异常”将捕获每种类型的异常,无论是 ZF 异常还是 PDO 异常或完全不同的异常

于 2011-02-18T13:05:58.967 回答
3

它会抛出一个Zend_Db_Statement_Exception.

关于找出抛出了什么异常,您可以查看edorian 的答案

于 2011-02-18T13:15:46.760 回答