Můžete to provést pomocí bloku try catch:
try {
$prep->execute($values);
// do other things if successfully inserted
} catch (PDOException $e) {
if ($e->errorInfo[1] == 1062) {
// duplicate entry, do something else
} else {
// an error other than duplicate entry occurred
}
}
Můžete se také podívat na alternativy, jako je „INSERT IGNORE“ a „INSERT... ON DUPLICATE KEY UPDATE“ – i když si myslím, že jsou specifické pro MySQL a byly by v rozporu s přenositelností používání PDO, pokud vás to znepokojuje. .
Edit:Chcete-li více formálně odpovědět na vaši otázku, pro mě řešení č. 1 (defenzivní programátor) při plném použití účinně eliminuje bod jedinečného omezení na prvním místě. Takže bych souhlasil s vaší myšlenkou nechat MySQL starat se o kontrolu dat.