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
+
0
-

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
+
+1
-
<?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;
	}
}
?>
hrabovsky
Člen | 2
+
0
-

Děkuji mockrát :) To mě nenapadlo…