Они не повторяются, они играют разные роли в разных ситуациях.
exec () => Выполнить sql и вернуть затронутые строки.
rowCount ()=> Не выполняет никакого оператора, но возвращает строки, затронутые последним sql.
Они отличаются таким образом
Если вы используете execute (), то rowCount входит в его роль
$del = $dbh->prepare('DELETE FROM fruit');
$del->execute();
$count = $del->rowCount();
А когда вы используете exec, нет необходимости rowCount()
$count = $dbh->exec("DELETE FROM fruit WHERE colour = 'red'");
print("Deleted $count rows.\n");