Как проверить добавление в базу в PDO?
Использовать lastInsertId для проверки удалась вставка или нет - плохая идея.
Небольшой пример с php.netПримерExample on a new Row: 
<?php 
$sql = "INSERT INTO city (`city`) VALUES ('Paris') ON DUPLICATE KEY UPDATE `city` = 'Paris"; 
$dbh->query($sql); 
echo $dbh->lastInsertId(); 
?> 

Above displays: 1 
Expected display: 1 

Example on an existing row that gets updated: 
<?php 
$sql = "INSERT INTO city (`city`) VALUES ('Paris') ON DUPLICATE KEY UPDATE `city` = 'Paris"; 
$dbh->query($sql); 
echo $dbh->lastInsertId(); 
?> 
Above displays: 2 
Expected display: 1 (since no new records were inserted)
Поведение вызвано тем что innodb всегда увеличивает автоинкрементный счетчик вне зависимости от того удалась вставка или нет.
На мой взгляд если у Вас есть необходимость проверять успешность вставки, лучше использовать транзакции, но и там есть нюансы (пример оттуда же)<?php 
try { 
    $dbh = new PDO('mysql:host=localhost;dbname=test', 'username', 'password'); 

    $stmt = $dbh->prepare("INSERT INTO test (name, email) VALUES(?,?)"); 

    try { 
        $dbh->beginTransaction(); 
        $tmt->execute( array('user', 'user@example.com')); 
        $dbh->commit(); 
        print $dbh->lastInsertId(); 
    } catch(PDOExecption $e) { 
        $dbh->rollback(); 
        print "Error!: " . $e->getMessage() . "</br>"; 
    } 
} catch( PDOExecption $e ) { 
    print "Error!: " . $e->getMessage() . "</br>"; 
} 
?>
Неужели так сложно почитать мануал?