«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как эффективно объединить строки со значениями в SQL-запросах с помощью Go?

Как эффективно объединить строки со значениями в SQL-запросах с помощью Go?

Опубликовано 7 ноября 2024 г.
Просматривать:960

How to Effectively Concatenate Strings with Values in SQL Queries Using Go?

Эффективное создание SQL-запросов в Go

Объединение строк со значениями в текстовых SQL-запросах в Go может быть немного сложной задачей. В отличие от Python, синтаксис форматирования строк в Go ведет себя иначе, что приводит к распространенным ошибкам, подобным той, что встречается здесь.

Ошибка синтаксиса кортежа

Исходный фрагмент кода пытается использовать Python Кортеж в стиле, который не поддерживается в Go. Это приводит к синтаксической ошибке:

query := fmt.Sprintf(`SELECT column_name FROM table_name
        WHERE column1_name = %d AND column2_name = %d`,
        (val1, val2))

Несовпадающие типы

Попытка привести элементы кортежа в виде строк также завершается неудачно из-за несоответствия типов:

query := fmt.Sprintf(`SELECT column_name FROM table_name
        WHERE column1_name = %d AND column2_name = %d`,
        val1, val2)

Избегать несоответствия операторов

Приведение параметров в виде строк и их объединение с помощью оператора %s будет работать, но не рекомендуется. Такой подход создает риск несоответствия операторов:

query := fmt.Sprintf(`SELECT column_name FROM table_name
        WHERE column1_name = %s AND column2_name = %s`,
        strconv.Itoa(val1), val2)

Решение Go

Чтобы правильно написать текстовый SQL-запрос с конкатенацией значений в Go, используйте fmt.Sprintf следующим образом:

query := fmt.Sprintf(`SELECT column_name FROM table_name
        WHERE column1_name = %d AND column2_name = %s`,
        val1, val2)

Этот синтаксис позволяет избежать уязвимостей внедрения и обеспечивает правильное преобразование типов.

Предотвращение внедрения

Чтобы предотвратить атаки SQL-инъекцией, всегда используйте подготовленные операторы или укажите escape-символы для вводимых пользователем данных.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3