Agora que estamos no ano de 2015, há muito poucas razões para não usar o do PHP DOP implementação.
O método "OO" adequado e moderno para detectar e tratar uma falha de inserção devido a uma violação de restrição de chave é o seguinte:
try {
//PDO query execution goes here.
}
catch (\PDOException $e) {
if ($e->errorInfo[1] == 1062) {
//The INSERT query failed due to a key constraint violation.
}
}
A PDOException objeto tem um lote mais a dizer sobre a natureza específica do erro também (mais detalhes do que se poderia querer ou precisar, aparentemente).