Правильный ответ
// Достанем юзера по мылу
$sql = 'SELECT * FROM `user` WHERE `email` = ?';
$result = $db->prepare($sql);
$result->execute([$email]);
$user = $result->fetch();
// потом сверим его хеш пароля с паролем из формы
if ($user && password_verify($_POST['password'], $user['password'])) {
echo "it's ok";
}
Переменная в запросе только одна, поэтому нет смысла устраивать писанину с именованными плейсхолдерами.
Запрос может не вернуть ни одной строки, и если это не проверить, то будет ошибка.
Ну и имя поля в таблице вполне себе читается из запроса.
По поводу остальных вопросов. Есть такая штука, поисковая машина. Она помогает находить ответы на вопросы самостоятельно. Самыми популярными являются google.com и yandex.ru. И это реально работает. Просто попробуй:
Что дают обратные апострофы в именах таблиц и полей?password_hash и PDO