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, ein Python zu verwenden Tupel im Stil, das in Go nicht unterstützt wird. Dies führt zu einem Syntaxfehler:
<code class="go">query := fmt.Sprintf(`SELECT column_name FROM table_name WHERE column1_name = %d AND column2_name = %d`, (val1, val2))</code>
Nicht übereinstimmende Typen
Der Versuch, die Tupelelemente als Zeichenfolgen umzuwandeln, schlägt ebenfalls aufgrund einer Typinkongruenz fehl:
<code class="go">query := fmt.Sprintf(`SELECT column_name FROM table_name WHERE column1_name = %d AND column2_name = %d`, val1, val2)</code>
Operatorkonflikte vermeiden
Die Parameter als Zeichenfolgen umzuwandeln und sie mit dem Operator %s zu verketten, würde funktionieren, wird aber nicht empfohlen. Dieser Ansatz birgt das Risiko einer Operatorinkongruenz:
<code class="go">query := fmt.Sprintf(`SELECT column_name FROM table_name WHERE column1_name = %s AND column2_name = %s`, strconv.Itoa(val1), val2)</code>
Die Go-Lösung
Um eine Text-SQL-Abfrage mit Werteverkettung in Go korrekt zu schreiben, verwenden Sie fmt.Sprintf wie folgt:
<code class="go">query := fmt.Sprintf(`SELECT column_name FROM table_name WHERE column1_name = %d AND column2_name = %s`, val1, val2)</code>
Diese Syntax vermeidet Injektionsschwachstellen und stellt eine ordnungsgemäße Typkonvertierung sicher.
Injektionsverhinderung
Um SQL-Injection-Angriffe immer zu verhindern Verwenden Sie vorbereitete Anweisungen oder stellen Sie Escape-Zeichen für vom Benutzer bereitgestellte Eingaben bereit.
Das obige ist der detaillierte Inhalt vonWie verkette ich Strings effektiv mit Werten in SQL-Abfragen mithilfe von Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!