Как безопасно добавить параметр $1 в SQL

Запишите WHERE email = $1 и передайте email отдельным аргументом драйверу. Не вставляйте кавычки вокруг $1 и не формируйте SQL через fmt.Sprintf с вводом.

Короткий ответ

Что ответить на собеседовании

Запишите WHERE email = $1 и передайте email отдельным аргументом драйверу. Не вставляйте кавычки вокруг $1 и не формируйте SQL через fmt.Sprintf с вводом.

Подробный разбор

Ответ с пояснениями

Условие

В Go с PostgreSQL нужен запрос пользователя по email. Драйвер использует позиционные параметры $1, $2. Как заменить конкатенацию пользовательского ввода параметром?

Ответ

Запишите WHERE email = $1 и передайте email отдельным аргументом драйверу. Не вставляйте кавычки вокруг $1 и не формируйте SQL через fmt.Sprintf с вводом.

Пример вызова: db.QueryRowContext(ctx, "SELECT id FROM users WHERE email = $1", email).Scan(&id). Обработайте отсутствие строки и прочие ошибки отдельно. Параметры подходят для значений, но не для произвольных имён таблиц или направления сортировки: такие части выбирайте из allowlist.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее