Détection des exceptions pour la solution de contournement « INSÉRER… SUR MISE À JOUR DE CLÉ EN DUPLICATE » dans ZF

StackOverflow https://stackoverflow.com/questions/5041534

Question

ZF 1.9.5 ici.Quelqu'un a suggéré d'attraper des exceptions pour émuler ON DUPLICATE KEY UPDATE lors de l'utilisation de Zend_Db_Table.

Actuellement, je reçois

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'i7dd30253497cfc0539d7c5830a926f7d' for key 'ukey'

..lors de l'utilisation

$orderRow = $this->createRow();
$orderRow->ukey = $ukey;
$orderRow->save();

Alors, je veux attraper ce connard avec try / catch.À titre exceptionnel update , autre insert.
Mais je ne sais pas quoi attraper. Zend_Db_Exception? PDOException? Zend_Db_Adapter_Exception?J'en ai essayé plusieurs, mais je ne pense pas y être parvenu.


Modifier plus tard.Cela a fonctionné pour moi :

        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();
            }
        }
Était-ce utile?

La solution

Regardez quelle exception est levée comme ceci :

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

Cela devrait vous indiquer quel type d'exception vous devez intercepter, car "Exception" interceptera tous les types d'exception, qu'il s'agisse d'une exception ZF, d'une exception PDO ou de quelque chose de complètement différent.

Autres conseils

Il lancera un Zend_Db_Statement_Exception.

Pour savoir quelle exception est levée, vous pouvez jeter un œil à La réponse d'Edorian.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top