Anda dapat menjalankan ini dengan blok 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
}
}
Anda juga dapat melihat alternatif seperti "INSERT IGNORE", dan "INSERT... ON DUPLICATE KEY UPDATE" - meskipun saya pikir itu khusus MySQL dan akan bertentangan dengan portabilitas menggunakan PDO, jika itu adalah sesuatu yang Anda khawatirkan .
Sunting:Untuk menjawab pertanyaan Anda secara lebih formal, bagi saya, solusi # 1 (programmer defensif) dalam penggunaan penuh secara efektif menghilangkan titik kendala unik sejak awal. Jadi saya setuju dengan pemikiran Anda untuk membiarkan MySQL menangani pemeriksaan data.