Elaboración efectiva de consultas SQL en Go
Concatenar cadenas con valores en consultas SQL de texto puede ser un poco complicado en Go. A diferencia de Python, la sintaxis de formato de cadenas de Go se comporta de manera diferente, lo que genera errores comunes como el que se encuentra aquí.
Error de sintaxis de tupla
El fragmento de código inicial intenta utilizar un Python -tupla de estilo, que no es compatible con Go. Esto da como resultado un error de sintaxis:
query := fmt.Sprintf(`SELECT column_name FROM table_name
WHERE column1_name = %d AND column2_name = %d`,
(val1, val2))
Tipos no coincidentes
Intentar convertir los elementos de la tupla como cadenas también falla debido a una falta de coincidencia de tipos:
query := fmt.Sprintf(`SELECT column_name FROM table_name
WHERE column1_name = %d AND column2_name = %d`,
val1, val2)
Evitar la discrepancia del operador
Convertir los parámetros como cadenas y concatenarlos con el operador %s funcionaría, pero no se recomienda. Este enfoque introduce el riesgo de que el operador no coincida:
query := fmt.Sprintf(`SELECT column_name FROM table_name
WHERE column1_name = %s AND column2_name = %s`,
strconv.Itoa(val1), val2)
La solución Go
Para escribir correctamente una consulta SQL de texto con concatenación de valores en Go, use fmt.Sprintf de la siguiente manera:
query := fmt.Sprintf(`SELECT column_name FROM table_name
WHERE column1_name = %d AND column2_name = %s`,
val1, val2)
Esta sintaxis evita vulnerabilidades de inyección y garantiza una conversión de tipos adecuada.
Prevención de inyección
Para evitar ataques de inyección SQL, utilice siempre preparado declaraciones o proporcionar caracteres de escape para entradas proporcionadas por el usuario.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3