The only way to do this without defining aliases is to fetch rows indexed by column position instead of by column name:
$sth->fetchAll(PDO::FETCH_NUM);
You could also reduce the work to alias columns by aliasing only the columns that need it:
SELECT *, posts.created_at AS postCreatedAt, posts.updated_at AS postUpdatedAt
FROM `users` LEFT OUTER JOIN `posts` ON users.id=posts.user_id
However, it's generally considered a bad idea to use SELECT *
in production code anyway. You don't typically need all the columns, so just fetch those that you do need. This reduces unnecessary waste of bandwidth as you fetch results.