SQL-Abfragen effektiv in Go erstellen
Das Verketten von Zeichenfolgen mit Werten in Text-SQL-Abfragen kann in Go etwas schwierig sein. Im Gegensatz zu Python verhält sich die String-Formatierungssyntax von Go anders, was zu häufigen Fehlern wie dem hier aufgetretenen führt.
Tupel-Syntaxfehler
Der ursprüngliche Codeausschnitt versucht, einen Python zu verwenden Tupel im Stil, das in Go nicht unterstützt wird. Dies führt zu einem Syntaxfehler:
query := fmt.Sprintf(`SELECT column_name FROM table_name
WHERE column1_name = %d AND column2_name = %d`,
(val1, val2))
Nicht übereinstimmende Typen
Der Versuch, die Tupelelemente als Zeichenfolgen umzuwandeln, schlägt ebenfalls aufgrund einer Typinkongruenz fehl:
query := fmt.Sprintf(`SELECT column_name FROM table_name
WHERE column1_name = %d AND column2_name = %d`,
val1, val2)
Konflikte Operatoren vermeiden
Das Umwandeln der Parameter in Zeichenfolgen und deren Verkettung mit dem Operator %s würde funktionieren, wird aber nicht empfohlen. Dieser Ansatz birgt das Risiko einer Operatorinkongruenz:
query := fmt.Sprintf(`SELECT column_name FROM table_name
WHERE column1_name = %s AND column2_name = %s`,
strconv.Itoa(val1), val2)
Die Go-Lösung
Um eine Text-SQL-Abfrage mit Werteverkettung in Go korrekt zu schreiben, verwenden Sie fmt.Sprintf wie folgt:
query := fmt.Sprintf(`SELECT column_name FROM table_name
WHERE column1_name = %d AND column2_name = %s`,
val1, val2)
Diese Syntax vermeidet Injektionsschwachstellen und stellt eine ordnungsgemäße Typkonvertierung sicher.
Injektionsverhinderung
Um SQL-Injection-Angriffe zu verhindern, verwenden Sie immer vorbereitet Anweisungen oder stellen Sie Escape-Zeichen für vom Benutzer bereitgestellte Eingaben bereit.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3