Du kan köra detta med ett försöksfångstblock:
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
}
}
Du kan också titta på alternativ som "INSERT IGNORE" och "INSERT... ON DUPLIKATE KEY UPDATE" - även om jag tror att de är MySQL-specifika och skulle gå emot portabiliteten att använda PDO, om det är något du är orolig över .
Edit:För att mer formellt svara på din fråga, för mig, eliminerar lösning #1 (den defensiva programmeraren) i full användning effektivt poängen med den unika begränsningen i första hand. Så jag håller med om din tanke om att låta MySQL ta hand om datakontroll.