MySQL関数を使用してみてください。正しい結果が返される場合、問題はPDO:rowCount()
になります。
$stmt = $db->prepare('INSERT INTO table (`id`, `name`, `email`) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE `name` = ?, `email` = ? ;');
$stmt->execute( array ( $id, $name, $email, $name, $email ) );
$rc = $db->query("SELECT ROW_COUNT()")->fetchColumn();
echo $rc;