Możesz to wykonać za 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
}
}
Możesz również przyjrzeć się alternatywom, takim jak „INSERT IGNORE” i „INSERT… ON DUPLICATE KEY UPDATE” – chociaż myślę, że są one specyficzne dla MySQL i byłyby sprzeczne z przenośnością używania PDO, jeśli jest to coś, o co się martwisz .
Edycja:Aby bardziej formalnie odpowiedzieć na twoje pytanie, rozwiązanie nr 1 (programista defensywny) w pełnym użyciu skutecznie eliminuje punkt unikalnego ograniczenia. Zgadzam się więc z Twoją myślą, że MySQL zajmie się sprawdzaniem danych.