Odchytávání chyb (PDOException)
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- hrabovsky
- Člen | 2
Dobrý den,
Dělám v nette teprv pár dní kvůli projektu do školy. Dospěl jsem ke kódu níže, kde jestli je to možné, chci odchytnout chyby při insert/delete/update dotazech pro MySql databázi. Konkrétně vkládám přes selecty do tabulky customer_service_assn cizí klíče customer_id a service_id.
Například při vložení duplicitních záznamů mi to hodí správně ve flash zprávě SQLSTATE[23000]: Integrity constraint violation: 1062 a k druhé eventuální chybě dojde při odeslání defaultního ‚-vyberte-‘ (SQLSTATE[23000]: Integrity constraint violation: 1452).
Jde o to, že když odchytnu 23000, tak už nevím jak zareagovat zvlášť na 1452 a 1062. Doufám, že jsem to dobře popsal. Možná že jde o malichernost, ale mě to nedá.
Děkuji za případný komentář.
<?php
...
try{
if ($customer_id > 0) {
Model::customerServiceAssn()->find($customer_id)->update($form->values);
$this->flashMessage('Údaje o službách zákazníka upraveny.');
}else{
Model::customerServiceAssn()->insert($form->values);
$this->flashMessage('Služba byla přidána zákazníkovi');
}
$this->redirect('default');
}catch(PDOException $e){
if($e->getCode()==23000){
//$this->flashMessage('Tento klient už tuto službu využívá');
$this->flashMessage($e->getMessage());
}elseif($e->getCode()==42000) $this->flashMessage($e->getMessage());
else throw $e;
}
}
...
?>
- Patrik Votoček
- Člen | 2221
<?php
...
}catch(PDOException $e){
if($e->getCode()==23000){
if (strpos($e->getMessage(), 1452) !== FALSE) {
$this->flashMessage('Nevybrali jste službu');
} elseif (strpos($e->getMessage(), 1062) !== FALSE {
$this->flashMessage('Tento klient už tuto službu využívá');
}
$this->flashMessage($e->getMessage());
}elseif($e->getCode()==42000) $this->flashMessage($e->getMessage());
else throw $e;
}
}
?>