"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como concatenar strings com valores de maneira eficaz em consultas SQL usando Go?

Como concatenar strings com valores de maneira eficaz em consultas SQL usando Go?

Publicado em 2024-11-07
Navegar:319

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

Criando consultas SQL de maneira eficaz no Go

Concatenar strings com valores em consultas SQL de texto pode ser um pouco complicado no Go. Ao contrário do Python, a sintaxe de formatação de string do Go se comporta de maneira diferente, levando a erros comuns como o encontrado aqui.

Erro de sintaxe de tupla

O trecho de código inicial tenta usar um Python tupla de estilo, que não é compatível com Go. Isso resulta em um erro de sintaxe:

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

Tipos incompatíveis

A tentativa de converter os elementos da tupla como strings também falha devido a uma incompatibilidade de tipo:

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

Evitar incompatibilidade de operador

Converter os parâmetros como strings e concatená-los com o operador %s funcionaria, mas não é recomendado. Esta abordagem introduz o risco de incompatibilidade de operador:

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

A solução Go

Para escrever corretamente uma consulta SQL de texto com concatenação de valores em Go, use fmt.Sprintf da seguinte maneira:

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

Essa sintaxe evita vulnerabilidades de injeção e garante a conversão de tipo adequada.

Prevenção de injeção

Para evitar ataques de injeção de SQL, sempre use preparado instruções ou fornecer caracteres de escape para entradas fornecidas pelo usuário.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3