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.
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