В чем особенность экранирования в запросах к БД

«В чем особенность экранирования в запросах к БД» — вопрос из категории Базы данных, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Экранирование в SQL-запросах необходимо для предотвращения SQL-инъекций. В Go есть несколько подходов:

  1. Плейсхолдеры (? или $n):
    db.Exec("INSERT INTO users(name) VALUES(?)", userName)
Драйвер БД автоматически экранирует значения.
  1. Named параметрыsqlx):
    db.NamedExec("INSERT INTO users(name) VALUES(:name)", map[string]interface{}{"name": userName})
  1. Ручное экранирование (не рекомендуется):
    safeName := db.QuoteIdentifier(userName)

Особенности:

  • Экранирование зависит от СУБД (MySQL, PostgreSQL и т.д.)
  • Плейсхолдеры работают только для значений, не для идентификаторов таблиц/столбцов
  • Для динамических имен таблиц используйте QuoteIdentifier или шаблоны с валидацией