To będzie przykład dość poglądowy
(jest to jakiś skrawek jednej z moich aplikacji):
<?php
// ...
try
{
$objModel->addQuestion();
}
catch( SQLException $objException )
{
switch( $objException->getCode() )
{
case 1062 :
$objRequest->setError( 'question', 'Takie pytanie już istnieje.' );
break;
default :
$objRequest->setError( 'error', 'Nie można dodać pytania.' );
break;
}
return View::ERROR;
}
//...
?>
Klasa obiektu
$objQuestion przy dodawaniu artykułu korzysta z AdoDB, które to wyrzuca wyjątek, jeśli wykonywane jest zapytanie, naruszające unikalność pól w tabeli z artykułami.
Kodem naruszenia takiej unikalności jest kod MySQL'a
1062.
A tabela z pytaniami może wyglądać tak:
CREATE TABLE `faq` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`languageId` int(2) NOT NULL DEFAULT '0',
`position` int(10) NOT NULL DEFAULT '1',
`question` varchar(255) NOT NULL DEFAULT '',
`answer` text NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `question` (`languageId`,`question`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Czyli nie może być rekordu o takiej samej kombinacji id języka i pytanie.